1.TCP基础知识
1.1 TCP头格式有哪些
TCP头部格式中包含源端口号、目标端口号,序列号,确认应答号,控制位,窗口大小,校验和,紧急指针,选项,数据等等。
- 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就[累加]一次该[数据字节数]的大小。用来解决网络包乱序问题。
- 确认应答号:指下一次[期望]收到的数据的序列号,发送端收到这个确认应答后人为这个序号以前的数据都被正常接收。用来解决丢包的问题。
- 控制位:
- ACK:该位为1时,[确认应答]的字段变为有效,TCP规定除最初建立连接时的SYN包之外该位必须设置为1;
- RST:该位为1时,表示TCP连接中出现异常必须强制断开连接;
- SYN:该位为1时,表示希望建立连接,并在其[序列号]的字段进行序列号初始值的设定;
- FIN:该位为1时,表示后面不会再有数据,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN为为1的TCP段。
1.2 为什么需要TCP协议?TCP工作在哪一层?
因为IP层是不可靠的,不保证网络包的交付,不保证网络包的按序交付,也不保证网络包中的数据完整性。如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的TCP负责可靠传输。
TCP是一个工作在传输层的可靠数据传输的协议,能确保接收端接受的网络包无损坏、无间隔、非冗余且有序。
1.3 什么是TCP?
TCP是面向连接的、可靠的、基于字节流的传输层通信协议。
- 面向连接:一定是[一对一]才能连接,不像UDP可以一个主机同时向多个主机发送消息即一对多;
- 可靠:无论网络链路中出现什么变化,TCP都可以保证一个报文一定能够到达接收端;
- 字节流:用户消息通过TCP协议传输传输时,消息可能会被操作系统[分组]程多个TCP报文,如果接收方的程序不知道[消息的边界],那么无法读出一个有效的用户消息。TCP报文是[有序的],当前一个TCP报文没有收到时,即使收到后面的报文,也不能将其交给应用层处理,同时对[重读]报文自动丢弃。
2.连接建立
3.连接断开
4.Socket编程
5.参考文章
本人博客内容是基于小林coding的图解系统写的,中间省略了部分内容,大家可以去小林coding博客看更详细的图解网络,链接为:小林coding (xiaolincoding.com)。