Linux网络编程【TCP通信协议】
二.TCP通信协议
1 三次握手
建立连接(三次握手)的过程:
- 客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的段1。
客户端发出段1,SYN位表示连接请求。序号是1000,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次虽然没发数据,但是由于发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。
- 服务器端回应客户端,是三次握手中的第2个报文段,同时带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。
服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求,同时声明最大尺寸为1024。
- 客户必须再次回应服务器端一个ACK报文,这是报文段3。
客户端发出段3,对服务器的连接请求进行应答,确认序号是8001。在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三方握手(three-way-handshake)”。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。
2 四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
-
客户端发出段7,FIN位表示关闭连接的请求。
-
服务器发出段8,应答客户端的关闭连接请求。
-
服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求。
-
客户端发出段10,应答服务器的关闭连接请求。
建立连接的过程是三方握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止。
3 mss
最大报文长度: 一般出现在三次握手的前两次,用来告知对方发送数据的最大长度MTU: 最大传输单元 网卡
4 滑动窗口
每一次读取数据之后,回ack报文,报文中会携带当前缓冲区大小,用来告知对方
5 多进程实现并发服务器
6.TCP状态转换流程
netstat -anp | grep 端口号 可查看
常见网络知识面试题
-
TCP如何建立链接
-
TCP如何通信
-
TCP如何关闭链接
-
什么是滑动窗口
-
什么是半关闭
-
局域网内两台机器如何利用TCP/IP通信
-
internet上两台主机如何进行通信
-
如何在internet上识别唯一一个进程
答:通过“IP地址+端口号”来区分不同的服务
-
为什么说TCP是可靠的链接,UDP不可靠
-
路由器和交换机的区别
-
点到点,端到端
- 点赞
- 收藏
- 关注作者
评论(0)