TCP vs UDP
- TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、传输大量数据(流模式)、速度慢,建立连接开销较多(时间,系统资源)。TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等;
- UDP:面向非连接、传输不可靠、传输少量数据(数据包模式)、速度快。UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。
计算机网络(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
- 网际层协议:IP协议、ICMP协议、ARP协议、RARP协议
- 传输层协议:TCP协议、UDP协议
- 应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS
HTTPS
- HTTPS即加密的HTTP,HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间
三次握手TCP的连接建立:
- client发送syn包(syn=x),进入SYN_SENT状态,等待服务器确认。
- server发送SYN+ACK包(ack=x+1,syn=y),进入SYN_RECV状态。
- client发送ack包(ack=y+1)
- client、server进入ESTABLISHED,连接成功。
四次挥手TCP的连接释放:
- client发送释放数据报文,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),进入FIN-WAIT-1状态。
- server发出确认报文,ACK=1,ack=u+1,seq=v,此时,进入CLOSE-WAIT状态,client收到报文进入FIN-WAIT-2状态。
- server最后数据发送完毕,发送连接释放报文FIN=1,ack=u+1,seq=w,进入LAST-ACK。
- client发出确认报文,ACK=1,ack=w+1,seq=u+1,进入TIME-WAIT状态
- server收到客户端确认报文之后,进入CLOSED状态
- client之后经过最长报文段寿命的时间后,当client撤销相应TCB后,进入CLOSED状态
TCP丢包原因:
如果在通信过程中,发现缺少数据或者丢包,那边么最大的可能性是程序发送过程或者接受过程中出现问题。
例如:我有2台服务器 ,A和B服务器。
A服务器发送数据给B服务器频率过高时,B服务器来不及处理,造成数据丢包。(原因可能是程序逻辑问题,多线程同步问题,缓冲区溢出问题)
如果A服务器不对发送频率进行控制,或者数据进行重发的话,那么B服务器收到数据就会少。就会造成丢失数据
TCP丢包解决:
-
数据分片:发送端对数据进行分片,接受端要对数据进行重组,由TCP确定分片的大小并控制分片和重组
-
到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认
-
超时重发:发送方在发送分片时设置超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片数据
-
滑动窗口:TCP连接的每一方的接受缓冲空间大小固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出
-
失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
-
重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;
-
数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验或有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发