网络的五层划分
应用层: DHCP、HTTP、 HTTPS 、DNS
传输层: UDP、TCP
网络层: ICMP 、IP
链路层: ARP、 VALN
物理层: 网络跳线
TCP和UDP的区别
TCP是面向连接的传输层协议,能够准确可靠的把数据传输给对方,当数据有丢包的时候会重发,但是需要在建立和断开需要至少7次的发包和收到,会浪费流量,主要用于可靠性较高的地方。
UDP是面向无连接的传输层协议,意思是只负责传输数据,不能保证对方收到数据和收到数据的正确顺序,数据的正确性由应用层来校验。主要用于高速传输和实时性要求较高的场合使用。
三次握手和四次挥手
三次握手.pngB的TCP服务器进程先创建传输控制块TCB,准备接收客户进程的连接请求。然后服务器进程就处于收听状态。
A的TCP客户进程也是首先创建TCB,然后向B发出连接请求报文段。
- 1: A向B发送连接请求报文段,这时首部中的同步位 SYN=1 ,初始序号seq =x 。TCP规定,SYN=1的报文不能携带数据,但要消耗一个系列号。这时,A进入同步已发送状态。
- 2:B收到连接请求报文后,如同意建立连接,则向A发送确认。在确认报文中应把SYN位和ACK位都置为1,确认号为ack=x+1,同时也为自己选择一个初始序号seq=y。这时,TCP服务器进入了同步收到状态。
- 3:TCP客户端收到B的确认消息后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq =x+1 。TCP规定,ACK报文段可以携带数据。这时,TCP连接已建立,A进入已建立连接状态。
- 当B收到A的确认后,也进入已建立连接状态。
为什么A还要发送一次确认呢?主要是防止已失效的连接请求报文突然又传到了B。
如果不采用三次握手,只要B发出了确认,新的连接就建立了。采用三次握手,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。
44次挥手.png- 1:A向TCP发送连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FIN置为1,其序号seq=u
- 2:B收到连接释放报文段后即发出确认,确认号ack=u+1,而这个报文段自己的序号是v。然后B就进入关闭等待状态。TCP服务器进程这时应通知应用进程,因而A到B的这个方向的连接就释放了,这时的TCP连接处于半关闭状态。
- A收到B的确认之后,立即进入终止等待2状态,等待B发出的连接释放报文段。
- 3:若B没有要向A发送数据,其用用进程就通知TCP释放连接。这时B发出的连接释放报文必须使FIN =1,并重复发送上次已发送过的确认号ack=u+1.这时B就进入了最后确认状态,等待A的确认。
- A在收到B的连接释放报文后,必须对此发出确认。在确认报文中把ACK置1,确认号ack=w+1,而自己的序号是seq =u+1。然后就进入时间等待状态。请注意,现在TCP连接还没有释放掉。必须等2MSL后,A才进入关闭状态。
- B收到A发出的确认后,就进入关闭状态。
为什么A在时间等待状态必须等2MSL的时间呢?
第一,保证A发送的最后一个ACK报文能到达B。
第二,防止之前说过的“已失效的连接请求报文段”出现在本连接中。
网友评论