You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TCP以全双工方式发送数据,为了保证在不可靠信道上数据的可靠传输。
三次握手建立连接的目的:知道双方的存在,同步开始序列号,协商一些参数。 1. 过程
a. 发送方发送同步报文,即SYN标志位为1,以及同步的初始序列号seq=x。
b. 接受方收到后,知道对方要和我同步初始序列号,并建立连接。于是发送同步+确认报文,即发送SYN,ACK标志位都为1,以及同步的初始序列号seq=y,和期待收到的下一个报文的序列号ack=x+1。
c. 发送方收到接收方的信息后,知道自己的信息已经成功发送到收方,并且收方也确认和我同步序列号。这时候发送方会发送确认报文,即ACK=1,seq=x+1,ack=y+1。于是建立连接,双方已经同步序列号,之后双方可以互发数据。
ack的作用是告诉对方自己已经收到的序列号和期望收到的序列号。 2. 为什么需要三次握手? a. 在两次握手之后,发送方知道自己的同步序列号已经到达对方,并且知道对方的初始序列号。但这时候,接收方不知道自己的序列号有没有正确发往发送方。为了双方正确同步序列号,需要三次握手。假如两次握手可能会带来资源浪费的问题。如果A往B第一次发送的请求因为网络原因卡住,A会再次往B发送请求建立连接,若A和B的第二次连接正常,传输数据后正常断开之后,A的第一次请求网络好了这时候到达了B,B会以为这是A的正常请求,B回复了ack之后,如果没有三次握手,连接就建立了,服务器会为该连接分配资源,但其实A根本没有想要建立该链接。这样就会浪费不必要的资源。 b. 从宏观的角度来说,为了能在不可靠的信道上进行可靠的全双工通信,最小的交互的次数是三次。第一次握手,接收方知道他的接收信道没有问题;第二次握手,发送方知道他的发送信道和接收信道都没有问题,这时候,接受方不知道它的发送信道有没有问题。所以还需要一次握手,这样双方都能确定自己的接收和发送信道没有问题。
四次挥手
1. 过程
a. 发送方发送FIN=1表示自己没有数据再往对方发送,附带自己的序列号seq=u;
b. 接收方收到之后,回复ACK,ack=u+1表示已经收到。附带自己的序列号seq=v;
c. 接收方发送FIN=1表示自己没有数据要发送,附带ack=u+1和序列号seq=w;
d. 发送发收到对方的FIN之后,回复ACK,ack=w+1表示自己已经收到,此时连接释放,附带自己的序列号seq=u+1。 2. 为什么需要四次挥手?
因为TCP是全双工通信,可能A没有数据发往B,但B这时候可能还有数据要发往A。 github链接
The text was updated successfully, but these errors were encountered:
维基百科
TCP/IP协议族
维基百科中将TCP/IP的数据链路层和物理层看作网络接口层。
IP协议,其支撑协议:ICMP、ARP、RARP、IGMP;
IP协议:不可靠、无连接的数据报协议,尽最大努力的服务,不提供差错检测或跟踪;
UDP协议:提供无连接通信,且不对传输包进行可靠性确认;
TCP特性
注意: TCP 不是 100% 可靠的协议,它所能提供的是数据的可靠递送和故障的可靠通知。
TCP和UDP的区别
TCP面向连接、采用流模式、保证报文的顺序和正确性
UDP无连接、不保证报文的正确性,可能丢包
UDP相对来说,效率高、速度快、占用资源少、不可靠
三次握手
TCP以全双工方式发送数据,为了保证在不可靠信道上数据的可靠传输。
三次握手建立连接的目的:知道双方的存在,同步开始序列号,协商一些参数。
1. 过程
a. 发送方发送同步报文,即SYN标志位为1,以及同步的初始序列号seq=x。
b. 接受方收到后,知道对方要和我同步初始序列号,并建立连接。于是发送同步+确认报文,即发送SYN,ACK标志位都为1,以及同步的初始序列号seq=y,和期待收到的下一个报文的序列号ack=x+1。
c. 发送方收到接收方的信息后,知道自己的信息已经成功发送到收方,并且收方也确认和我同步序列号。这时候发送方会发送确认报文,即ACK=1,seq=x+1,ack=y+1。于是建立连接,双方已经同步序列号,之后双方可以互发数据。
ack的作用是告诉对方自己已经收到的序列号和期望收到的序列号。
2. 为什么需要三次握手?
a. 在两次握手之后,发送方知道自己的同步序列号已经到达对方,并且知道对方的初始序列号。但这时候,接收方不知道自己的序列号有没有正确发往发送方。为了双方正确同步序列号,需要三次握手。假如两次握手可能会带来资源浪费的问题。如果A往B第一次发送的请求因为网络原因卡住,A会再次往B发送请求建立连接,若A和B的第二次连接正常,传输数据后正常断开之后,A的第一次请求网络好了这时候到达了B,B会以为这是A的正常请求,B回复了ack之后,如果没有三次握手,连接就建立了,服务器会为该连接分配资源,但其实A根本没有想要建立该链接。这样就会浪费不必要的资源。
b. 从宏观的角度来说,为了能在不可靠的信道上进行可靠的全双工通信,最小的交互的次数是三次。第一次握手,接收方知道他的接收信道没有问题;第二次握手,发送方知道他的发送信道和接收信道都没有问题,这时候,接受方不知道它的发送信道有没有问题。所以还需要一次握手,这样双方都能确定自己的接收和发送信道没有问题。
四次挥手
1. 过程
a. 发送方发送FIN=1表示自己没有数据再往对方发送,附带自己的序列号seq=u;
b. 接收方收到之后,回复ACK,ack=u+1表示已经收到。附带自己的序列号seq=v;
c. 接收方发送FIN=1表示自己没有数据要发送,附带ack=u+1和序列号seq=w;
d. 发送发收到对方的FIN之后,回复ACK,ack=w+1表示自己已经收到,此时连接释放,附带自己的序列号seq=u+1。
2. 为什么需要四次挥手?
因为TCP是全双工通信,可能A没有数据发往B,但B这时候可能还有数据要发往A。
github链接
The text was updated successfully, but these errors were encountered: