著名外国网站,网站开发用用什么语言最好,做教育机构的设计哪些网站好,国内十大搜索引擎网站参考#xff1a;4.2 TCP 重传、滑动窗口、流量控制、拥塞控制 | 小林coding TCP报文 其中比较重要的字段有#xff1a;#xff08;1#xff09;序号#xff08;sequence number#xff09;#xff1a;Seq序号#xff0c;占32位#xff0c;用来标识从TCP源端向目的端发…参考4.2 TCP 重传、滑动窗口、流量控制、拥塞控制 | 小林coding TCP报文 其中比较重要的字段有1序号sequence numberSeq序号占32位用来标识从TCP源端向目的端发送的字节流发起方发送数据时对此进行标记。2确认号acknowledgement numberAck序号占32位只有ACK标志位为1时确认序号字段才有效AckSeq1。3标志位Flags共6个即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下URG紧急指针urgent pointer有效。ACK确认序号有效。PSH接收方应该尽快将这个报文交给应用层。RST重置连接。SYN发起一个新连接。FIN释放一个连接。
需要注意的是 不要将确认序号Ack与标志位中的ACK搞混了。 确认方Ack发起方Seq1两端配对。 如何唯一确定一个 TCP 连接呢
TCP 四元组可以唯一的确定一个连接四元组包括如下
源地址源端口目的地址目的端口 对 IPv4客户端的 IP 数最多为 2 的 32 次方客户端的端口数最多为 2 的 16 次方也就是服务端单机最大 TCP 连接数约为 2 的 48 次方。
UDP 和 TCP 有什么区别呢分别的应用场景是
UDP 不提供复杂的控制机制利用 IP 提供面向「无连接」的通信服务。
UDP 协议真的非常简头部只有 8 个字节64 位UDP 的头部格式如下
UDP报文 1源端口2 字节发送方端口号2目的端口2 字节 接收方端口号3报文长度2 字节UDP 用户数据报的总长度以字节为单位。4校验和2 字节检测 UDP 用户数据报在传输中是否有错有错就丢弃。用于校验 UDP 数据报的数字段和包含 UDP 数据报首部的“伪首部”。伪首部 又称为伪包头Pseudo Header是指在 TCP 的分段或 UDP 的数据报格式中在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节所构成的扩展首部结构。此伪首部是一个临时的结构它既不向上也不向下传递仅仅只是为了保证可以校验套接字的正确性。5数据UDP 的数据部分如果不为偶数需要用 0 填补就是说如果数据长度为奇数数据长度加“1”。
TCP 和 UDP 应用场景
由于 TCP 是面向连接能保证数据的可靠性交付因此经常用于
FTP 文件传输HTTP / HTTPS
由于 UDP 面向无连接它可以随时发送数据再加上 UDP 本身的处理既简单又高效因此经常用于
包总量较少的通信如 DNS 、SNMP 等视频、音频等多媒体通信广播通信
TCP 和 UDP 可以使用同一个端口吗
答案可以的。
在数据链路层中通过 MAC 地址来寻找局域网中的主机。在网际层中通过 IP 地址来寻找网络中互连的主机或路由器。在传输层中需要通过端口进行寻址来识别同一计算机中同时通信的不同应用程序。
所以传输层的「端口号」的作用是为了区分同一个主机上不同应用程序的数据包。
传输层有两个传输协议分别是 TCP 和 UDP在内核中是两个完全独立的软件模块。
当主机收到数据包后可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP所以可以根据这个信息确定送给哪个模块TCP/UDP处理送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。 TCP三次握手 为什么挥手握手三次
接下来以三个方面分析三次握手的原因
三次握手才可以阻止重复历史连接的初始化主要原因三次握手才可以同步双方的初始序列号三次握手才可以避免资源浪费 TCP四次挥手 为什么挥手需要四次
再来回顾下四次挥手双方发 FIN 包的过程就能理解为什么需要四次了。
关闭连接时客户端向服务端发送 FIN 时仅仅表示客户端不再发送数据了但是还能接收数据。服务端收到客户端的 FIN 报文时先回一个 ACK 应答报文而服务端可能还有数据需要处理和发送等服务端不再发送数据时才发送 FIN 报文给客户端来表示同意现在关闭连接。
从上面过程可知服务端通常需要等待完成数据的发送和处理所以服务端的 ACK 和 FIN 一般都会分开发送因此是需要四次挥手。