四、Linux网络编程-TCP/IP基础(四)传输层协议TCP、TCP报文格式、连接三次握手、终止四次挥手
来源:互联网 发布:网络主播必须禁止 编辑:程序博客网 时间:2024/06/05 15:27
一、TCP特点
(1)基于字节流
TCP传输的单位是段,基于字节流意味着对段的边界不做任何假定,TCP没有提供边界处理,所以TCP需要处理粘包问题。
(2)、面向连接
需要建立连接
(3)、可靠传输
网际校验和
(4)、缓冲传输
缓存数据,找到合适时机发送,提高效率
(5)、全双工
(6)、流量控制
滑动窗口机制
二、TCP报文格式
源端口号与目的端口号 源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。
序号 序号表示在这个报文段中的第一个数据字节序号。
确认号 仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。
头部长度 4位,TCP头部最多60个字节
保留位 6位,必须为0
6个标志位
- URG-紧急指针有效
- ACK-确认序号有效
- PSH-接收方应尽快将这个报文段交给应用层
- RST-连接重置
- SYN-同步序号用来发起一个连接
- FIN-表示将要终止一个连接
窗口大小 通过窗口大小来达到流量控制。
校验和 对tcp头与数据进行校验。
紧急指针 是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
选项与填充(选项为4字节整数倍,否则用0填充) 最常见的可选字段是最长报文大小MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置,默认为536(20+20+536=576字节的IP数据报)
三、连接建立三次握手
(1)、三次握手
首先A发送一个TCP a段到B,B收到之后确认收到了A发送的TCP段a,但是B不知道A有没有收到,所以B又发送一个TCP段b,并带上一个确认号a+1,表示期望收到的下一次数据的编号是b+1。然后A向B发送编号为b+1的段,连接建立完成。
四、连接终止四次握手
(1)、首先A发送一个序号为x的FIN TCP段,确认号为y,表示下次期望收到的数据序号为y。
(2)、B对A发送的序号为x的数据进行确认,确认号为x+1.
(3)、B发送一个序号为y的FIN TCP段,确认号为x+1,表示下次期望收到的数据序号为x+1。
(4)、A对B发送的序号为y的数据进行确认,确认号为y+1.
五、TCP如何保证可靠性
不可靠主要包括:差错(校验和)、丢包(超时重传)、失序、重复
- 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
- 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
- TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)
- TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
- IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
- TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。
0 0
- 四、Linux网络编程-TCP/IP基础(四)传输层协议TCP、TCP报文格式、连接三次握手、终止四次挥手
- TCP协议报文格式和三次握手,四次挥手
- TCP连接过程(三次握手) 终止协议(四次挥手)
- TCP/IP三次握手四次挥手流程解析及TCP/IP四层模型
- TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议四层
- TCP/IP协议传输中的三次握手和四次挥手
- 深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手+四次挥手实例)
- TCP协议中的三次握手和四次挥手(图解)&&TCP/IP 七层网络模型
- TCP/IP四层模型,TCP/IP连接三次握手与释放四次握手
- TCP/IP协议三次握手四次挥手
- TCP/IP 协议 三次握手四次挥手
- TCP三次握手、四次挥手及四层模型
- 网络基础:TCP三次握手/四次挥手
- 【网络基础】TCP协议之三次握手和四次挥手
- TCP/IP中的TCP协议的三次握手,四次挥手
- 【Linux网络编程】浅谈 TCP 三次握手和四次挥手
- linux网络编程/TCP三次握手与四次挥手
- 【[TCP/ip】-TCP三次握手四次挥手
- POJ 1006-Biorhythms(中国剩余定理)
- 【Matlab学习笔记】保存图片(待续)
- A-STAR算法说明
- Class_封装网络请求
- Linux的scp命令使用
- 四、Linux网络编程-TCP/IP基础(四)传输层协议TCP、TCP报文格式、连接三次握手、终止四次挥手
- ubuntu apt-get 比较快的国内源
- Bootstrap学习 小例子
- Nginx编写HTTP模块:第一个Nginx HTTP模块 “Hello World!”
- jQuery的基本概念与高级编程
- hdu 1542 Atlantis(线段树进阶,扫描线,矩形面积并)
- Bootstrap—基础样式定义
- python进程池:multiprocessing.pool
- Bootstrap 教程