简单了解TCP
TCP是什么?
由于应用层IP协议的不可靠传输,主要是无法保证数据报到达目的地以及包乱序的问题,在运输层实现了TCP协议,提供可靠的传输,对于TCP来说,在发送数据之前需要先建立连接,同时每个报文段的大小不能超过MSS,对于IP协议来说,MSS + IP头和TCP头的大小不能超过MTU(一般是1500字节)。
TCP和UDP的区别
TCP和UDP都是运输层的协议,提供进程到进程的一个逻辑连接,两者的主要区别体现在:
- 连接:TCP是面向连接的,用一个四元组标记一个TCP连接,UDP则不用握手就可以传输,只需要一个二元组(目标IP,目标端口)标记一个UDP
- 字节流:TCP是基于字节流的,有粘包问题(所以要记录数据长度),而UDP是基于报文的
- 可靠:TCP是可靠传输(重传、网络控制、拥塞控制),而UDP的数据报可能丢失
- 头部长度:TCP的头部长度一般是20字节,而UDP的头部长度只有8字节
- 使用场景:TCP一般用于文件传输或者浏览器HTTP请求等,UDP主要用于视频通话或者DNS等
TCP的面向连接是什么
如果传输层协议选择了TCP,那么在首次发送报文段之前需要通过三次握手先建立TCP连接。
三次握手
第一次握手:客户端初始一个序列号client_isn,发送SYN报文给服务端
第二次握手:服务端响应客户端的SYN报文,同时初始一个序列号server_isn,发送SYNACK报文给客户端
客户端收到第二次握手已经成功建立连接,第三次握手可以携带数据
第三次握手:客户端响应服务端的SYN报文
socket编程
TODO
如果某一方因为某些原因(关闭了浏览器、进程崩溃、宕机等因素)会主动关闭连接,此时就会发生四次挥手来完成关闭连接
四次挥手
第一次挥手:一般是客户端发起,发送FIN报文给服务端
第二次挥手:服务器端响应ACK给客户端,同时进入CLOSE_WAIT状态
如果服务器端有数据要发送,在此时发送,等到发送完成之后才继续进行第三次挥手
第三次挥手:服务器端发送FIN报文给客户端
客户端收到第三次握手,进入TIME_WAIT状态
第四次挥手:客户端响应ACK给服务器端
CLOSE_WAIT状态
TODO
TIME_WAIT状态
TODO
TCP如何保证可靠传输
重传机制
网络控制
拥塞控制
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 白兰!