1.TCP的三次握手,四次挥手
三次握手:客户端首先发送一个SYN给服务端(请求连接)
服务器对客户端的SYN反馈一个ACK(说我准备好了),既然如此就顺便发送一个SYN(请求连接:你准备好了吗)。tcp的协议头 ACK和SYN 协议头都是占有一个位,1代表开启,0表示关闭,
客户端就反馈ACK(我也准备好了)
所以呢这样TCP建立连接是三次握手。
四次挥手:客户端想断开连接了,发送给服务端一个FIN(请求断开)
服务端收到后就反馈一个ACK,我收到了。
这时候等服务端确定跟客户端没啥连接了(你发给我的东西都收到了),就发送一个FIN给客户端。
客户端也确定没啥好连接了,反馈一个ACK。
所以呢TCP断开连接四次挥手。
2.TCP和UDP的特点
TCP的特点:
- 面向连接,双工,最主要的就是可靠性,提供可靠的网络传输。
- 流控技术:tcp在发送缓冲区存储数据,接收缓冲区接收数据。程序准备好了,就从接收缓冲区读取数据。如果接收缓冲区满了,将其丢弃。
- 应用场景:远程控制SSH,FTP,SMTP,IMAP,微信。
UDP的特点:
- 无连接,讲究轻装上阵。主要是灵活,在传输层直接发送报文。传输速度快。
- checksum校验和机制,看看作用包是否出错。
3.TCP的粘包和拆包
拆包:数据过大。粘包:数据过小
如何保证数据的顺序?
在发送我们来个自增长的Sequence Number (Seq)给每段tcp标记序号,怎么样。就接收方可以对Seq排序了
但是接收方回复发送方,也要这个,有点难实现,加上tcp又是双工。
那发送的字节数和接收的字节数,加ack。(seq和ack都是针对对方的)
seq是累计发送的字节数,ack是累计接收的字节数。
4.TCP的稳定性(滑动窗口和流速控制)
如果中间发生未接收到呢?
如果4还是没有发送,则放弃5,6,7.
对于流速控制设置窗口大小。