博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP协议(数据传输层)的连接过程【三次握手四次挥别】
阅读量:6292 次
发布时间:2019-06-22

本文共 1237 字,大约阅读时间需要 4 分钟。

前段时间学习OSI网络模型感觉自己懂了其实,还很浅显这两条想深入的学习一下就把自己的心的写在这里,供大家参考指正。

前言
TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。就这点与无连接协议如UDP不同,UDP向一端发送数据报时,无需任何握手。
一、TCP报文段的内容
TCP数据报文外边是包裹的网络层IP协议的报文如下图
TCP协议(数据传输层)的连接过程【三次握手四次挥别】

IP首部就是目的和源的IP地址什么的这里就先不研究了重点是这个TCP首部数据格式如下。如果不计任选字段通常是20个字节。

TCP协议(数据传输层)的连接过程【三次握手四次挥别】

序号:Seq序号,占32位用来标识TCP源端向目的端发送的字节流,发起方发送数据是对此进行标记。

确认序号:ack序号,只有ACK标志位为1时,确认序号段才有效,ack=Seq+1
标志位有6个:
URG:紧急指针有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层处理
RST:重置链接
SYN:发起一个新连接
FIN:释放一个连接
注意事项:
1)不要将确认序号ack(小写)与确认标志位ACK搞混
2)确认方ack=发起方Seq+1两端配对
二、三次握手
所谓三次握手(Three-way Handshke)就是建立TCP连接,意思就是互相要传送3个包以确定连接的建立。(在socket变成中,这一过程由客户端执行connetc来触发在C语言中使用过于bind配合)
TCP协议(数据传输层)的连接过程【三次握手四次挥别】

三次握手:

1)Client将标志SYN置为1,随机产生一个值Seq=x
2)Server收到数据包由标志位SYN=1知道client请求建立连接.server将标志位SYN和ACK都置为1之后ack=x+1,随机产生一个seq=y。并将数据发送给client确认请求
3)Client收到确认后检查ack是否为x+1。ACK是否为1.如果正确侧将ACK置为1然后ack=y+1。将数据发送给server。Server检查ack是否为y+1。ACK是否为1如果正确则连接建立成功。
三、四次挥手
TCP协议(数据传输层)的连接过程【三次握手四次挥别】

由于TCP连接是全双工的,因此每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方的连接,收到FIN只是意味着这一方向上没有数据流动了,即不会在收到数据但是这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭而另一方则执行被动关闭。

1)client发送一个FIN,用来关闭client到server的数据传送,
2)Server收到一FIN后,发送一个ACK给client,确认序号为收到序号+1(与SYN一样,一个FIN占用一个序号),
3)Server发送一个FIN用来关闭server到client的数据传送
4)Client收到FIN后发送一个ACK给server确认序号为收到序号+1
完成了四次挥手告别

转载于:https://blog.51cto.com/13638458/2113045

你可能感兴趣的文章
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>