iOS~网络基础~TCP

2019-01-15  本文已影响2人  派大星的博客

参考文档
Transmission Control Protocol ~ Wiki

一、 Transmission Control Protocol 传输控制协议

1、网络分层


网络协议

在网络OSI的七层模型中

TCP在第四层——Transport层,
IP在第三层——Network层,
ARP在第二层——Data Link层;

在第二层上的数据,叫Frame,
在第三层上的数据,叫Packet,
第四层的数据,叫Segment。

同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封装的过程。

TCP/IP协议簇

2、TCP Header


TCP Header

Sequence number (32 bits)
Has a dual role:

序号(32位)
有双重作用:


Acknowledgment number (32 bits)

If the ACK flag is set then the value of this field is the next sequence number that the sender of the ACK is expecting. This acknowledges receipt of all prior bytes (if any). The first ACK sent by each end acknowledges the other end's initial sequence number itself, but no data.

确认号码(32位)

如果设置了ACK标志,则该字段的值是ACK的发送方期望的下一个序列号。这确认收到所有先前的字节(如果有的话)。每端发送的第一个ACK确认另一端的初始序列号本身,但没有数据。


Flags (9 bits) (aka Control bits)
Contains 9 1-bit flags

标志(9位)(又名控制位)
包含9个1位标志


3、TCP协议头部的格式


image.png

下面就将每个字段的信息都详细的说明一下:

Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制;


4、TCP 3 way handshake

TCP 3 way handshake

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。


5、TCP four-way handshake


four-way handshake

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。


6、TCP变化状态图

1920px-Tcp_state_diagram_fixed_new.svg.png

TCP 总结

1、没有什么通信连接是安全的,三次是收敛,概率的选择。 即使一万次握手也就是99.99999% ,没法做到100%。因为最有一次握手是不会被确认的。

2、SYN:就是为三次握手设计的。
3、FIN:就是为四次分手设计的

补几张网络上的图加强理解:


computer-network-osi-model-layers.png osi-model-7-layers-1024x734.jpg Osi-model-jb.png 屏幕快照 2019-01-15 下午2.32.19.png
上一篇下一篇

猜你喜欢

热点阅读