「客户端」学习网络编程,不了解TCP协议?难怪面试被刷下去,还不来学习!( 二 )
- TCP 连接断开
- Socket 编程
PS:本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识 , 这些留在下篇哈!
正文
01 TCP 基本认识瞧瞧 TCP 头格式
我们先来看看 TCP 头的格式 , 标注颜色的表示与本文关联比较大的字段 , 其他字段不做详细阐述 。
序列号:在建立连接时由计算机生成的随机数作为其初始值 , 通过 SYN 包传给接收端主机 , 每发送一次数据 , 就「累加」一次该「数据字节数」的大小 。 用来解决网络包乱序问题 。
确认应答号:指下一次「期望」收到的数据的序列号 , 发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收 。 用来解决不丢包的问题 。
控制位:
- ACK:该位为 1 时 , 「确认应答」的字段变为有效 , TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1。
- RST:该位为 1 时 , 表示 TCP 连接中出现异常必须强制断开连接 。
- SYC:该位为 1 时 , 表示希望建立连 , 并在其「序列号」的字段进行序列号初始值的设定 。
- FIN:该位为 1 时 , 表示今后不会再有数据发送 , 希望断开连接 。 当通信结束希望断开连接时 , 通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段 。
IP
层是「不可靠」的 , 它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性 。如果需要保障网络数据包的可靠性 , 那么就需要由上层(传输层)的
TCP
协议来负责 。因为 TCP 是一个工作在传输层的可靠数据传输的服务 , 它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的 。
什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议 。
- 面向连接:一定是「一对一」才能连接 , 不能像 UDP 协议 可以一个主机同时向多个主机发送消息 , 也就是一对多是无法做到的;
- 可靠的:无论的网络链路中出现了怎样的链路变化 , TCP 都可以保证一个报文一定能够到达接收端;
- 字节流:消息是「没有边界」的 , 所以无论我们消息有多大都可以进行传输 。 并且消息是「有序的」 , 当「前一个」消息没有收到的时候 , 即使它先收到了后面的字节已经收到 , 那么也不能扔给应用层去处理 , 同时对「重复」的报文会自动丢弃 。
我们来看看 RFC 793 是如何定义「连接」的:
Connections:
The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream.
The combination of this information including sockets sequence numbers and window sizes is called a connection.
简单来说就是 , 用于保证可靠性和流量控制维护的某些状态信息 , 这些信息的组合 , 包括Socket、序列号和窗口大小称为连接 。
所以我们可以知道 , 建立一个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识 。
- Socket:由 IP 地址和端口号组成
- 工业互联网@程序员的术与道:术——编程基本功之网络编程
- 可可酱不插电,无网络限制,学习工作效率更高,移动A4打印机:760g
- Hi威海客户端南海新区:精准护航让企业“满血复活”
- 南方Plus客户端向全球直播卖货,广州皮具商拟抱团进驻网上广交会
- 南方Plus客户端全国首台校园病毒智能监测机在深圳试用,风险“早”知道
- 简简科技机器学习修炼手册:从倔强青铜到最强王者
- 新华网客户端1800亿元投资发力数字新基建,广州市首批73个数字新基建重大项目签约
- 南方Plus客户端广州给大湾区带来什么新气象?,南方观察|1800亿新基建项目
- 北京日报客户端国家卫健委:互联网医疗不得突破现有法律法规
- 南方Plus客户端这款以色列研发的temi机器人有何亮点?,智能家居时代