UDP:用户数据报协议
客户不与服务器建立连接,它只管用函数sendto给服务器发送数据报,此函数要求目的地址(服务器)作为其参数。类似的,服务器不从客户接受连接,它只管调用函数recvfrom,等待来自其客户的数据到达。与数据报一起,recvfrom返回客户的协议地址,所以服务器可以发送响应给正确的客户。
TCP:传输控制协议
首先,TCP提供客户与服务器的连接;
其次,TCP提供可靠性;
第三,TCP通过给所发送数据的每一个字节关联一个序列号进行排序;
第四,TCP提供流量控制;TCP总是告诉对方它能够接受多少字节的数据,这称为通告窗口。
最后,TCP连接时全双工的;
说明:1.创建TCP套接口
2.捆绑服务器的众所周知端口
3.把套接口变换成监听套接口
4.接受客户连接,发送应答,服务器进程在调用accept函数后处于睡眠状态,它等待客户的连接和内核对它的接受。TCP连接使用三路握手来建立,当握手完毕,accept函数返回,其返回值是一个已连接描述字的新描述字。
建立一个TCP连接时,会发生下述情形:
1、服务器端必须做好准备接受外来的连接。这通常通过 socket(), bind(), listen() 三个函数来完成的。我们称之为 被动打开(passive open).
2、客户端通过调用connect发起主动打开(active open)。这导致客户端TCP发送SYN同步分节。它告诉服务器客户端在(待建立的)连接中发送的数据的初始化序列号。通用SYN分节不携带数据,
3、服务器必须确认(ACK) 客户端的SYN,同时自己也得发送一个SYN分节,它含有服务器将在统一连接中发送的数据的初始化序号。服务器在单个分节中发送SYN和对客户端SYN的ACK确认。
4、客户端必须确认服务器的SYN。
TCP连接的终止:
1、某个应用程序首先调用close,主动关闭(active close) 该端的TCP于是发送一个FIN分节,表示数据发送完毕。
2、接收到这个FIN的对端执行被动关闭(passive close)。这个FIN是TCP确认。它的接收也作为一个文件结束符(end of file) 传递给接收端的应用程序(放在排队等候应用进程接收的任何其他数据之后),因为FIN的接收意味着接收端应用程序在相应连接上再无额外数据可以接收。
3、一段时间以后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
4、接收这个最终FINd额原发送端TCP(即执行主动关闭的一端)确认这个FIN。