当前位置:网站首页>传输层协议(TCP3次握手)
传输层协议(TCP3次握手)
2022-08-05 05:19:00 【幻star】
传输层协议
TCP/IP协议栈
TCP/IP介绍
TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。
TCP/IP 通信过程
TCP特点及特性
**特点:**稳定、可重传、传输慢
特性:
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
TCP端口
系统当中每打开一个进程会分配pid(系统中的编号,方便管理),其次会分配一个端口号
**端口号作用:**确定进程
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。(源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535))
序列号:表示本报文段所发送数据的第一字节的编号。(在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始 无限循环)
确认号:(ack)表示接收方期望收到发送方下一个报文段的第一个字节数据编号。(也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题?)
数据偏移/首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。
控制位:
URG(紧急位):本报文段中发送的数据是否包含紧急数据。(注:后面的紧急指针字段只有当URG=1时才有效 )
ACK(确认位):前面确认号字段是否有效。(注:只有当ACK=1时,前面的确认号字段才有效。A和B已经建立连接状态 ACK=1)
PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据。(为接收后续数据腾出空间,如果为1,则表示对方应当立即把数据提交上层应用,否则将会一直停留在TCP缓冲区中)
RST(重置位):若RST=1,则与主机的连接出现了严重错误(需释放连接,再重连),或说明上次发送给主机的数据有问题(主机拒绝回应,带RST标志的TCP报文段为复位报文段)
SYN(同步位):在建立连接时使用,用来同步序号。(A想和B请求建立连接状态 SYN=1 同步位)
FI N (断开位):通知对方本端要关闭连接了,标记数据是否发送完毕(A和B已经断开连接 FIN=1)窗口大小:表示现在允许对方发送的数据量。(也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据)
校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据TCP首部长度进行推算。(TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节)
TCP3次握手(重点)
注释:
- Seq=x //序列号
- SYN=1 //同步位,表示发送另一台计算机的TCP数据包,请求在它们之间建立连接。
- ack=x+1 //确认号
- ACK=1 //确认位,
当PC1想和PC2建立起连接,将连接信息写入报文
第一次握手:
客户端给服务器发送一个SYN报文(在TCP标头中SYN=1的TCP/IP数据包),该段中包含客户端的初始序列号Seq=x。
第二次握手:
服务器返回客户端SYN+ACK报文(在TCP标头中SYN=1,ACK=1的TCP/IP数据包),该段包含服务器的初始序列号Seq=y,同时用ack=x+1来表示已收到客户端的SYN段(ACK数据包是任何确认收到一条消息或一系列数据包的TCP数据包)
第三次握手:
客户端给服务器响应一个ACK报文(在TCP标头中ACK=1的TCP/IP数据包)该网段中ack=y+1来表示已收到服务器的SYN段,Seq=x+1
四次挥手
TCP超时重传
超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个 计时器 ,在一定时间内如果没有得到发送的数据报的ACK 报文 ,那么就重新发送数据,直到发送成功为止。 TCP 可靠性中最重要的一个机制是处理数据超时和重传。
UDP协议
UDP特性
- 工作在传输层
- 提供不可靠的网络访问
- 非面向连接协议
- 有限的错误检查
- 传输性能高
- 无数据恢复特性
边栏推荐
- Getting Started 11 Automatically add version numbers
- 阿里云视频点播
- 2020年手机上最好的25种免费游戏
- 入门文档11 自动添加版本号
- 入门文档10 资源映射
- [Day8] (Super detailed steps) Use LVM to expand capacity
- Getting Started 04 When a task depends on another task, it needs to be executed in sequence
- Three modes of vim
- 【3D模型教程】ZBrush如何表现皮肤纹理?
- Autoware中安装Yolo3目标检测模块遇到的问题
猜你喜欢
Remembering my first CCF-A conference paper | After six rejections, my paper is finally accepted, yay!
【Day8】RAID Disk Array
添加新硬盘为什么扫描不上?如何解决?
(C语言)动态内存管理
单臂路由与三成交换机
ACL 和NAT
Autoware中安装Yolo3目标检测模块遇到的问题
【Day8】(超详细步骤)使用LVM扩容
Getting Started 05 Using cb() to indicate that the current task is complete
偷题——腾讯游戏开发面试问题及解答
随机推荐
网站ICP备案是什么呢?
TCP/IP四层模型
D45_摄像机组件Camera
云游戏未来展望
【UiPath2022+C#】UiPath 循环
spark算子-map vs mapPartitions算子
Spark源码-任务提交流程之-6-sparkContext初始化
Hard Disk Partitioning and Permanent Mounting
dsf5.0新建页面访问时重定向到首页的问题
Getting Started 05 Using cb() to indicate that the current task is complete
【UiPath2022+C#】UiPath 数据操作
【Day8】 RAID磁盘阵列
来来来,一文让你读懂Cocos Creator如何读写JSON文件
unity实现第一人称漫游(保姆级教程)
C语言—三子棋的实现
账号与权限管理
Wireshark抓包及常用过滤方法
每日一题-有效的括号-0719
入门文档09 独立的watch
每日一题-字典