1、TCP报文头格式

TCP协议是传输层协议,它基于IP协议做可靠的数据传输。所以TCP报文在网络中传输时是存放在IP报文的Data字段中的,报文格式如下:

帧头 Data(IP报文) FCS
IP头 Data(TCP报文)
TCP头 Data

TCP头字段较多,这里将连续的字段做换行处理。

Source Port Destination Port Sequence Number Acknowledge Number Header length
16位 16位 32位 32位 4位
Resv URG ACK PSH RST SYN FIN Window Checksum Urgent Pointer Options
6位 1位 1位 1位 1位 1位 1位 16位 16位 16位 0-40字节

Source Port:源端口号

Destination Port:目的端口号

Sequence Number:首字节序号。TCP报文也是分段传输的,TCP的数据流为每一个字节都分配了序号,报文中记录其首字节的序号。如前一个报文段的首字节序号为100,而报文总长度为300字节,则下一报文段的首字节序号为400。

Acknowledge Number:确认序号。记录了下一报文段的首字节序号。

Header length:报文头长度。因Options字段长度可变,所以TCP报头的长度可变。

Resv:保留字段。供往后应用。

URG:紧急标志位。当URG=1时,表明此报文应尽快传送,而不要按本来的队列次序传送。

ACK:确认标志位。只有当ACK=1时,前面的确认序号字段才有意义。

PSH:急迫标志位。当PSH=1时,表明接收到此报文的主机应立即将此报文段传送至应用层,而不要等所有报文段都到齐了再向上交付

RST:复位标志位。当RST=1时,表明出现了严重的错误,接收到此报文的主机应与源主机断开并重建连接。还可以用来拒绝一个非法的报文段或拒绝打开一个连接。

SYN:同步标志位。在建立连接时使用,SYN=1表示这是一个连接请求或连接接受报文。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,应返回一个SYN=1和ACK=1的报文段。

FIN:终止标志位。用来释放一个连接,当FIN=1时,表明需要发送的报文段已发完,并要求释放传输连接。

Window:窗口字段。用来告知对方自己缓存区的大小,目标主机通过这个字段来确定返回给源主机的数据量最大值,也就是一个报文段的最大长度。

Checksum:校验和字段。校验范围包括首部和数据,由发送方填写接收方验证。

Urgent Pointer:紧急指针。它指出报文中紧急数据最后一个字节的序号。因为紧急数据有可能被分段发送,所以需要指明紧急数据的最后一字节,接收方接收完全后才能处理。只有当紧急标志位URG=1时此字段才有效。

Options:可选字段。TCP报文提供此字段用作功能扩展,包括窗口扩大和时间戳选项,后面会详细讲到。

2、TCP连接(三次握手)

三次握手中,使用了SYN标志位表明这是一个连接请求或连接接受报文;使用了seq(Sequence Number)字段和ack(Acknowledge Number)字段,用以校验报文的连续性;被连接主机使用ACK标志位表明同意连接。这里一般层连接的发起方为client端,被连接方成为server端,连接过程分为三次如下图所示。

第一次握手(SYN_SENT):Client向Server端发送一个请求报文,报文中SYN=1、Sequence Number=一个随机值J,Client进入SYN_SENT状态,等待Server确认。

第二次握手(SYN_RCVD):Server端收到该请求报文后,向Client返回一个确认报文,报文中SYN=1、ACK=1、Acknowledge Number=J+1、Sequence Number=一个随机值K,Server进入SYN_RCVD状态,等待Client端的再次确认。

第三次握手(ESTABLISHED):Client收到该确认报文后,认可连接已建立,于是向Server端发送一个连接建立的确认报文,报文中ACK=1、Acknowledge Number=K+1。Server端收到该报文后知道Client端已认可了本次连接,于是Client和Server就可以开始传输数据了。

3、TCP断开(四次挥手)

四次挥手中使用FIN标志位表明这是一个申请连接释放的报文;使用seq(Sequence Number)字段和ack(Acknowledge Number)字段,用以校验报文的连续性;被断开主机使用ACK标志位表明同意断开连接。因为TCP连接是全双工的,所以每个方向都必须单独进行关闭,各方向关闭均需两次共四次如下图所示。

第一次挥手(FIN_WAIT_1):Client发送一个关闭连接的请求报文,报文中FIN=1、Sequence Number=一个随机值M,Client进入FIN_WAIT_1状态,等待Server确认。

第二次挥手(CLOSE_WAIT):Server端收到该关闭的请求报文后,向Client返回一个确认报文,报文中ACK=1、Acknowledge Number=M+1,Server进入CLOSE_WAIT状态。Client端收到确认报文后就断开与Server的连接。

第三次挥手(LAST_ACK):Server端发送一个关闭连接的请求报文,报文中FIN=1、Sequence Number=一个随机值N,Server进入LAST_ACK状态,等待Client确认。

第四次挥手(TIME_WAIT):Client收到该关闭的请求报文后,向Server返回一个确认报文,报文中ACK=1、Acknowledge Number=N+1,Client进入TIME_WAIT状态。Server端收到确认报文后就断开与Client的连接,至此双向的连接都已关闭。

4、UDP报文头格式

UDP与TCP类似都是传输层协议,也是基于IP协议的,所以在传输时也是存放于IP报文的Data字段中。与TCP不同的是它是一种无连接的传输协议,它不提供数据包分组、组装和不能对数据包进行排序,也就是当报文发送后,是无法得知其是否安全完整的到达。

帧头 Data(IP报文) FCS
IP头 Data(UDP报文)
UDP头 Data
Source Port Destination Port Length Checksum data
8位 8位 8位 8位

Source Port:源端口号。

Destination Port:目的端口号。

Length:总长度。报文的长度。

Checksum:校验和。接收方用于校验传输是否正确。

【为什么TCP关闭是四次挥手】由于TCP连接是全双工的。

也就是说Clinet和Server端是可以同时收发的,在进行关闭时,若Client端关闭了Client到Server端的连接,但此时Server端可能还有数据没有发完,所以需要等到Server端也发完数据后,Server主动向Client发起关闭请求。可以这样理解,TCP连接后,Server和Client各自发送自己的数据,发送完毕后各自断开连接。应当将Client和Server连接断开看作是两次不连续的事件,实际上也会出现Server端先断开连接或Client和Server同时断开连接,所以需要四次握手。

【TCP可选字段】可选字段的第一个字节称为kind,说明选项的类型。默认kind为空,即不启用Options字段。

kind=0:禁用此字段。

kind=1:启用窗口扩大选项。此选项使TCP的窗口定义从原来的16位扩大到32位,就是说发送方的缓存区能支持从最大能支持65535字节到最大能支持4294967295字节。

kind=2:启用时间戳选项。此选项使发送方在每个报文段中放置一个时间戳,接收方会在确认收到的报文中带上这个数值,这样发送方就能计算报文段在网络中的往返延迟。

kind=3:启用窗口扩大和时间戳选项。

【TCP与UDP的区别】UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。

TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。而且在网络拥堵时可能出现先发出的数据后到达的情况,也就是接收方收到数据的顺序可能与发送方不一致。因此,通常人们把UDP协议称为不可靠的传输协议。

【UDP应用】既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?

其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。同时UDP也是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。

【TCP与UDP的端口号】TCP与UDP协议使用端口号为不同的应用保留其各自的数据传输通道。

UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据包通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。

实际上TCP和UDP是基础的传输协议,基于这二者实现的应用层协议可能有固定的端口号,如ftp服务进行TCP通讯时默认使用21号端口,有些应用也可能临时申请一个端口,通信完成后就释放该端口,由计算机统一管理

转载于:https://blog.51cto.com/bigmaomao/1845142

TCP/UDP-路由交换原理6-【HCNA笔记】相关推荐

  1. 802.3和以太网帧结构-路由交换原理1-【HCNA笔记】

    1.RAW 802.3帧格式 前导字段 帧起始符 DMAC SMAC Length Data FCS 7字节 1字节 6字节 6字节 2字节 46-1500字节 4字节 前导字段:每个帧以7个字节的前 ...

  2. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)

    Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...

  3. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  4. 网络层(TCP/UDP)攻击与防御原理

    应用层攻击 :HTTP.DNS.FTP等 应用层攻击可参考:应用层(DNS/HTTP/HTTPS)攻击与防御原理 网络层攻击防御 网络层攻击防御主要分为以下三类: TCP类报文攻击防御 UDP类报文攻 ...

  5. 网络原理:TCP/UDP

    目录 一.数据组织格式 1.1 xml 1.2 json 1.3 protobuffer 二.传输层重要协议---UDP协议 2.1 UDP协议端格式 2.2 校验和 三.传输层重要协议---TCP协 ...

  6. 网络原理之TCP/UDP IP

    1 TCP/IP协议五元组:源ip+源端口号+目的ip+目的端口+协议号 windows 查看某个端口: netstat -ano|findstr "想要查看的端口号".会显示某个 ...

  7. 深入浅出TCP/UDP 原理-UDP篇(2)及完整MATLAB实现UDP通信

    目录 调试代码在文末 写在前面 3. UDP疑难杂症 3.1 UDP的传输方式:面向报文 3.2 UDP数据包的发送和接收问题 3.3 UDP丢包问题 3.4 UDP冗余传输 4 UDP真的比TCP要 ...

  8. 网络原理之TCP/UDP协议

    UDP协议 UDP协议端格式 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度; 如果校验和出错, 就会直接丢弃 UDP的特点 UDP传输的过程类似于寄信. 无连接: 知道对端的 ...

  9. TCP和UDP区别及原理

    linux系统有丰富而稳定的网络协议栈,其范围是从协议无关层到各种网络协议的实现 计算机网络通信采用同步和异步两种方式,但传送效率最高的是同步方式. 网络模型 TCP/IP协议族体系结构 在tcp.i ...

  10. 路由交换——大学笔记

    文章目录 一.路由交换 二.Internet五层协议 1. 应用层 2. 运输层 3. 网络层 4. 数据链路层 5. 物理层 三.网络层 四.运输层 五.OSI七层模型 六.交换机命令 1. 交换机 ...

最新文章

  1. android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating cl
  2. Java yield详解_Java 中的 yield 关键字
  3. 04 canvas——位移画布和旋转缩放
  4. 用 JavaScript 验证只能输入数字,并做数字加总
  5. Cisco CCNP 笔记(一)
  6. 如何判断对象是不是出轨了?
  7. 【kafka】Number of insync replicas for partition __transaction_state-4 is below required minimum
  8. jsp中写隐藏td标签_28. Django 2.1.7 模板语言 变量、标签、过滤器、自定义过滤器、模板注释...
  9. 在不断迭代中改进--《全景探秘游戏设计艺术》笔记
  10. CMOS模拟集成电路版图设计课程
  11. 福昕pdf套件注册码激活
  12. 尚硅谷_宋红康_JDBC
  13. 中国书籍出版情况分析:2020年中国书籍出版总印数为65.2亿册(张),其中社科人文类占书籍94.8%[图]
  14. 理解浏览器的历史记录
  15. 如何利用PowerShell完成的Windows服务器系统安全加固实践和基线检测
  16. 甬台温、温福铁路动车组时刻表
  17. 软件项目管理_作业1
  18. 伪时序分析文献阅读——PAGA
  19. 声称代码已开源却迟迟没更新,网友等了好几个月,最终一怒之下把作者挂网上
  20. Netlist与RTL仿真结果不匹配

热门文章

  1. android ndk怎样加载o文件_Android开发:JNI与NDK全面剖析与实战
  2. 系统架构师 项目经理 哪个更有前景_OLED和QLED电视有什么区别?哪个更好更有前景?...
  3. xampp mysql关机意外_xampp运行MySQL shutdown unexpectedly解决方法
  4. mysql sleep进程 java_请教java更新mysql,更新进程sleep
  5. php里= 啥意思,PHP natcasesort() 函数 | 菜鸟教程
  6. html怎么编辑文字位置,html – 修正文本的位置背景剪辑
  7. 推导pca的降维损失_这应该是最全的PCA原理总结了(上)
  8. Bar函数--Matplotlib
  9. 如何恢复回收站清空的文件?简单步骤教你操作
  10. /etc/rc.local开启自启不执行问题