TCP协议
1.五层互联网协议栈
应用层:
(1)域名系统 (DNS):用于实现网络设备名字到IP地址映射的网络服务。
(2)文件传输协议(FTP):用于实现交互式文件传输功能。
(3)简单邮件传送协议(SMTP):用于实现电子邮箱传送功能。
(4)超文本传输协议(HTTP):用于实现WWW服务。
(5)简单网络管理协议(SNMP):用于管理与监视网络设备。
(6)远程登录协议(Telnet):用于实现远程登录功能。
传输层:TCP/UDP
网络层:IP
链路层:以太网协议,和广域网中的PPP协议
物理层:RS-232, RJ-45
2. 拥塞控制:
1.慢开始: 拥塞窗口初始值为1,收到接收方返回的确认信号后使用慢开始算法来增大拥塞窗口,拥塞窗口达到设定的慢开始门限后开始采用拥塞控制算法来增大拥塞窗口。慢开始增加是指数增加。
2.拥塞控制:线性增加拥塞窗口,直到遇到报文丢失,更改慢开始门限和拥塞窗口大小,然后重新开始慢开始算法。
3.快重传:对于丢失的报文,接收方连续发送丢失报文的ack,发送方收到连续三个重复的丢失报文确认信号,直接重传丢失报文,不再等待超时。也就不需要重新将拥塞窗口设置为1,避免进行慢开始算法。
4.快恢复:增大慢开始时的拥塞窗口初始值,将慢开始门限设置为发生拥塞时的窗口的一半。
3. TCP三次握手
客户端和服务端使用三次握手来初始化两个方向的初始序列号,确认号就是序列号+1。第三次握手用来保证连接的可靠性,防止过期请求再次发起连接。
4.四次挥手
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
(1) TCP客户端发送一个FIN报文,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN报文,它发回一个ACK报文,确认序号为收到的序号加1。和SYN一样,一个FIN报文将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
主动关闭一方处于TIME_WAIT状态(防止最后一个ack丢包,ack丢失,服务端会重发FIN,太多time_wait需要优化内核参数,加快连接的回收,或者改用长连接),被动关闭一方处于close_wait(太多,忘记close)。FIN 报文通过 socket 编程中的 close 触发。
5. 端口重用:同一个端口可以绑定到多个套接字上。
半开连接:客户端关机,服务端会隔一段后发送探测报文,没有相应会中断连接,避免资源浪费,