Tcp/Ip的体系结构及三次握手四次挥手

osi7层模型,分别是:

7层 应用层(Application Layer)
提供为应用软件而设的界面,以设置与另一应用软件之间的通信。例如:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6层 表示层(Presentation Layer)
把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第5层 会话层(Session Layer)
负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接
第4层 传输层(Transport Layer)
把传输表头(TH)加至数据以形成数据报。传输表头包含了所使用的协议等发送信息。例如:传输控制协议义(TCP)等
第3层 网络层(Network Layer)
决定数据的路径选择和转寄,它网络表头(NH)加至数据报,以形成数据包。网络表头包含了网络数据。例如:
互联网协议(IP)等,网关,多口网关(路由器)
第2层 数据链路层(Data link Layer)
负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成了帧。数据链表头(DLH)是包含了物理地址
和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线兼容认证券市场
(Wi-Fi)和通用分组无线服务(GPRS)等。
第1层 物理层(Physical Layer)
在局部局域网络上传送帧,它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、
中继器、网卡、主机适配器等。

TCP/IP协议分为4层,由上至下为应用层、传输层、网络层和网络接口层:

应用层:定义上层应用可以直接使用的高级协议,如httpftp等。
传输层:定义控制数据传输的协议,用以保证数据的可靠性和顺序到达性等,如tcp、udp协议。
网络层:定义不同网络类型间通信的协议,如IP协议用于实现网际路由,ICMP协议用于检测网络的畅通性,
ARP协议用于获取设备MAC地址等。
网络接口层:定义网络介质上的传输协议,和电气相关,如Ethernet协议、802.3协议等,主要由操作系统
的网卡驱动程序实现。

这里写图片描述

为什么TCP是三次握手而不是两次握手,为什么是四次挥手:

为什么是三次握手?

保证可靠的核心就是双方都需要确认自己发送和接受信息的功能正常,但因为网络环境的不稳定性,这一秒能
收发下一秒可能网络核心就发生严重拥塞,所以世界上不存在完全可靠的通信协议.
两次握手会怎样?
若建立连接只需两次握手,客户端并没有太大的变化,在获得服务端的应答后进入ESTABLISHED状态,即
确认自己的发送和接受信息的功能正常.
但如果服务端在收到连接请求后就进入ESTABLISHED状态,不能保证客户端能收到自己的信息,此时如果网
络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认
应答,双方便开始通信,通信结束后释放连接。
此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED
状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样
浪费服务端连接资源.

为什么是四次挥手?

这里写图片描述

A发送释放请求:

TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双向的,因此在四次挥手中,
前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接.
第一次挥手:
若A认为数据发送完成,则它需要向B发送连接释放请求.该请求只有报文头,头中携带的主要参数为:
FIN=1,seq=u.此时,A将进入FIN-WAIT-1状态.
FIN=1表示该报文段是一个连接释放请求.
seq=u,u-1是A向B发送的最后一个字节的序号.

B回应释放的应答,A到B连接已经断掉:

第二次挥手:
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放.
此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含: ACK=1,seq=v,ack=u+1.
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答.
seq=v,v-1是B向A发送的最后一个字节的序号.
ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节.A收到该应答,
进入FIN-WAIT-2状态,等待B发送连接释放请求.

B发送释放请求:

第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。
但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手:
当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:
FIN=1,ACK=1,seq=w,ack=u+1.随后B进入LAST-ACK状态.

A回应释放的应答,B到A连接已经断掉:

第四次挥手:
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会持续2MSL时间,
若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB.
为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态? 为了保证B能收到A的确认应答。 
若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,
但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值