用户: 需求发起者。
数据传输过程图:
应用程序: 发起数据的传输交流过程。
过程:
过程:
过程:
过程:
过程:
过程:
过程:
注: OSI参考模型总结 - 小白的博客 - CSDN博客
访问服务器的过程可以通过 windows+R 快捷命令 --> 进入运行界面--->然后通过cmd 命令 --->进入控制台--->然后输入命令 tracert + 访问的域名网址-->查看访问过程。
ping命令来测试网络连接:
物理层常见故障:
硬件连接问题:1接触不良2硬件未连通
数据链路层故障:
1MAC地址冲突不能上网;
2交换机与计算机网卡的带宽协商不一致,网速不一致导致网络不通;
3ADSL欠费导致网络不通;
4将计算机错误的连接到VLAN(Virtual Local Area Network)。
注:
网络层故障:
1计算机IP地址设置错误。
2计算机没有设置网关。
3计算机子网掩码配置错误。
4沿途路由器路由表错误。
传输层故障:
表示层故障:
乱码问题(字符集对应错误)
应用层故障:
应用层程序配置问题(浏览器服务器的配置问题导致上网故障等)
物理层安全:
防止非法计算机接入公司网络(包括无线AP)
数据链路层安全:
1设置WiFi密码,属于网络链路层添加秘钥的方法。
2公司内部的交换机可以设置哪个Mac地址可以接入,设置接多少台计算机。
3家里的ASDL拨号上网的需要登入账号密码。
4划分不同的VLAN(Virtual Local Area Network)
网络层安全:
1在路由器上设置ACL控制数据包转发,控制网络。
2在计算机上设置网络安全,设置访问权限。
应用层安全:
发现软件漏洞,增补丁。
TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。套接字可以实现将多个客户连接到一个服务器。
它是网络通信中端点的抽象表示,包含进行网络通信必需的五种信息:1连接使用的协议,2本地主机的IP地址,3本地进程的协议端口,4远地主机的IP地址,5远地进程的协议端口。
1域: 套接字通信中使用的网络介质,常见的有AF_INET(因特网络)
2类型:
a 流式套接字(sock_stream): 用于提供面向连接、有序的、可靠的双向jie节流的链接式数据传输服务,由类型sock_stream指定,他是在AF_INET域中通过TCP/IP链接实现的。
b 数据报套接字(sock_dgram): 提供了一种无连接的服务,是AF_INET域中通过UDP/IP链接实现的。
c 原始套接字(sock_raw): 允许对较低层次的协议直接访问,比如IP、ICMP协议,他常用于检验新的协议的实现或者访问现有服务中配置的新设备。网络监听技术很大程度上依赖于socket_raw
3协议: 套接字协议一般采用默认值。即默认参数为0。
1套接字是用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
2当前应用进程需要使用网络进行通信时,就会发出系统调用,请求 *** 作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。
3 *** 作系统为这些资源的总和,用一个叫做套接字描述符的号码表示,并把此号码返回给应用进程,应用进程所进行的网络 *** 作都必须使用这个号码。
4通信完毕后,应用进程通过一个关闭套接字的系统调用通知 *** 作系统回收与该“号码”相关的所有资源。
1连接创建阶段
a套接字被创建后,其端口号和IP地址都是空的,应用进程调用bind(绑定)来指明套接字的本地地址(在服务器端调用bind时就是把熟知端口号和本地IP填写到已创建的套接字中)
b服务器调用bind后 ,还必须调用listen(收听)把套接字设置为被动方式,以便随时接收客户的服务请求。(UDP服务器由于只提供了无限连接服务,不使用listen系统调用)
c客户进程发送连接请求后,服务器紧接着调用accept(接受),以把客户进程发来的连接请求提取出来。(系统调用accept的一个变量就是要指明哪一个套接字发起的连接。)
2数据传输阶段
客户和服务器都在TCP连接上使用send系统调用传送数据,使用recv系统调用接收数据。
3连接释放阶段
一旦客户或者服务器结束使用套接字,就把套接字撤销,此时调用close释放连接和撤销套接字。应用层总结-系统调用和应用编程接口 - 十分残念的博客 - CSDN博客
其过程示意图如下:
网络编程的目的:
直接或间接地通过网络协议与其他计算机进行通讯。
网络编程的问题:
1如何准确的定位网络上一台或多态主机。
2找到主机后,如何快速高效的传输数据。
网络编程的对象:
传输层提供的面向应用的可靠或非可靠的数据传输机制。
网络编程流行模型:
1CS模型(客户端/服务器模型)
2BS模型(浏览器/服务器模型)
参考网络编程--Socket(套接字) - A-祥子 - 博客园
注: 扩展链接内关于TCP/IP的相关知识讲解也相当详细,可以参考浏览一下。
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机 *** 作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接。客户端可以用connect建立一个连接。
#include <sys/socketh>
int connect(int sockfd, const struct sockaddr addr, socklen_t len);
返回值:若成功则返回0,出错则返回-1
在connect中所指定的地址是想与之通信的服务器地址。如果sockfd没有绑定到一个地址,connect会给调用者绑定一个默认地址。
当连接一个服务器时,出于一些原因,连接可能失败。要连接的机器必须开启并且正在运行,服务器必须绑定到一个想与之连接的地址,并且在服务器的等待连接队列中应有足够的空间。因此,应用程序必须能够处理connect返回的错误,这些错误可能由一些瞬时变化条件引起。
实例
程序清单16-2显示了一种如何处理瞬时connect错误的方法。这在一个负载很重的服务器上很有可能发生。
#include "apueh"
#include <sys/socketh>
#define MAXSLEEP 128
int
connect_retry(int sockfd, const struct sockaddr addr, socklen_t len)
{
int nsec;
/
Try to connect with exponential backoff
/
for(nsec = 1; nsec <= MAXSLEEP; nsec <<= 1)
{
if(connect(sockfd, addr, alen) == 0)
{
/
Connection accepted
/
return(0);
}
/
Delay before trying again
/
if(nsec <= MAXSEELP/2)
sleep(nsec);
}
return(-1);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)