TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手
TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
1.OSI参考模型
==========================================
物理层
作用:定义一些电器,机械,过程和规范,如集线器;
PDU(协议数据单元):bit/比特
设备:集线器HUB;
注意:没有寻址的概念;
==========================================
数据链路层
作用:定义如何格式化数据,支持错误检测;
典型协议:以太网,帧中继(古董级VPN)
PDU:frame(帧)设备:以太网交换机;
备注:交换机通过MAC地址转发数据,逻辑链路控制;
===========================================
网络层
作用:定义一个逻辑的寻址,选择最佳路径传输,路由数据包;
典型协议:IP,IPX,ICMP,ARP(IP->MAC),IARP;
PDU:packet/数据包;
设备:路由器
备注:实现寻址
============================================
传输层:
作用:提供可靠和尽力而为的传输;
典型协议:TCP,UDP,SPX,port(65535个端口),EIGRP,OSPF,
PDU:fragment 段;
无典型设备;
备注:负责网络传输和会话建立;
=============================================
会话层:
作用:控制会话,建立管理终止应用程序会话;
典型协议:NFS, SQL, ASP, PHP, JSP, RSVP(资源源预留协议), windows,
备注:负责会话建立;
==============================================
表示层:
作用:格式化数据;
典型协议:ASCII, JPEG. PNG, MP3. WAV, AVI,
备注:可以提供加密服务;
===============================================
应用层:
作用:控制应用程序;
典型协议:telnet, ssh, http, ftp, smtp, rip, BGP, (未完待续)
备注:为应用程序提供网络服务;
================================================
参考:
https://www.runoob.com/tcpip/tcpip-tutorial.html
https://blog.csdn.net/yaopeng_2005/article/details/7064869
2.TCP协议
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议。
流程图
流程解释
TCP三次握手过程
1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机A和主机B 就可以传输数据了.
(没有应用层的数据,SYN这个标志位只有在TCP建立连接时才会被置1,握手完成后SYN标志位被置0)
TCP四次挥手过程
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端
和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
ACK:TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
SYN:同步序列号,TCP建立连接时将此位置1
FIN:发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将此位置1
包头结构
内容 | 位数 |
---|---|
源端口 | 16位 |
目标端口 | 16位 |
序列号 | 32位 |
回应序号 | 32位 |
TCP头长度 | 4位 |
reserved | 6位 |
控制代码 | 6位 |
窗口大小 | 16位 |
偏移量 | 16位 |
校验和 | 16位 |
选项 | 32位(可选) |
TCP头长度+reserved+控制代码,合计为2字节,得出:TCP包头的最小长度为20字节
TCP的可靠性依靠什么实现
TCP的可靠性依靠以下7种机制实现:
(1)校验和:检验范围包括TCP首部和数据部分,发送方将整个报文段以字(16位)为单位分开,并将所有段进行反码相加,结果存放在校验和字段中,接收方用同样的方法计算,若最终结果全为1则正确,否则存在错误。
(2)序列号:TCP对每个字节的数据都进行编号。序列号作用有:
a.保证数据不丢失
b.保证数据按序到达
c.提高效率,累计确认
d.去除重复数据
(3)确认应答机制(ACK):TCP首部有标志位ACK,当ACK=1时表示确认号有效。接收方对于按序到达的数据会进行确认,发送方如果收到已发送数据的确认报文,则继续传输下一部分数据,否则等待一段时间后启动重传机制。
(4)超时重传机制:当数据在发送后一定时间内未收到接收方的确认,发送方就会进行重传。报文段发出到收到应答中间有一个报文段的往返时间RTT,超时重传时间RTO会略大于RTT,TCP会根据网络情况动态计算RTT,因此RTO也是不断变化的,Liunx中RTO呈指数递增,重传一定次数后关闭连接。
(5)连接管理机制:即上面提到的三次握手和四次挥手。
(6)流量控制:根据接收端的处理能力,来决定发送端的发送速度。TCP报文段首部有一个16位的窗口大小字段,该字段大小随着传输情况而变化,如果缓冲区满,就将窗口置为0,发送方收到后就不在发送数据,但定期会发送一个窗口探测报文,使接收方把窗口大小告诉发送方。
(7)拥塞控制:为了防止过多数据注入网络中造成网络拥堵。主要有四种算法:慢开始、拥塞避免、快重传、快恢复。
a.慢开始和拥塞避免
发送方维护一个拥塞窗口cwnd,大小等于发送窗口,慢开始的思想是一开始发送方发送一个字节,在收到接收方的确认后,将拥塞窗口大小翻倍,直到拥塞窗口大小达到慢开始门限ssthresh,停止慢开始算法,采用拥塞避免算法,拥塞窗口由指数增长变为线性增长,当网络拥塞,发生超时重传时,慢开始门限变为当前拥塞窗口大小的一半,拥塞窗口大小置1,重新开始慢启动算法。
b.快重传和快恢复
当发送方收到3个连续的重复确认,可能不是拥塞而是报文丢失,发送方执行快重传算法,对相应报文立即重传而不是等待超时重传,同时执行快恢复算法,发送方将慢开始门限和拥塞窗口调整为当前拥塞窗口大小的一半,然后执行拥塞避免算法。
TCP流量控制-滑动窗口协议
滑动窗口协议(Sliding Window Protocol),该协议是 TCP协议 的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。
如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
滑动窗口分为三类:停止等待、后退N帧、选择重传。
滑动窗口保证了传输可靠,提高了传输效率和稳定性。
参考:https://blog.csdn.net/includei/article/details/104680184
http://blog.chinaunix.net/uid-26548237-id-3966297.html
3.UDP协议
UDP(User Data Protocol,用户数据报协议)是一个非连接的协议。
流程图
流程解释
由于不需要建立连接,所以不断往对方主机发送UDP数据包,然后对方主机确认收到数据包,将数据包是否到达的消息及时反馈回来。
(ping操作就是这个原理,中间会有丢包情况)
UDP的关键点
1.UDP传送数据的速度受到以下因素影响
a.应用程序生成数据的速度
b.源端和终端主机性能的限制
c.传输带宽的限制
2.由于不需要维护连接状态,故一台服务器可向多个客户端传输相同数据。
一对多的关系,而TCP是一对一
3.UDP是面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
包头结构
内容 | 位数 |
---|---|
源端口 | 16位 |
目标端口 | 16位 |
长度 | 16位 |
校验和 | 16位 |
得出:UDP包头的最小长度,为8字节
参考:https://blog.csdn.net/u011957758/article/details/72353485
4.三次握手四次挥手
三次握手
建立连接
(1)客户端主动请求建立连接,发送SYN包(同步位SYN=1,序列号seq=x)到服务器端,并进入SYN-SENT状态,等待服务器确认;
(2)服务器端收到客户端发来的SYN包后必须对其进行确认,同时自己也发送SYN包请求连接,即发送ACK+SYN包(确认位ACK=1,同步位SYN=1,确认号ack=x+1,序列号seq=y)到客户端,此时服务器进入SYN-RECEIVED状态;
(3)客户端收到服务器端发来的ACK+SYN包后,向服务器发送确认包(确认位ACK=1,确认号ack=y+1,序列号seq=x+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,三次握手完成。
四次挥手
断开连接
(1)客户端发送连接释放报文(终止位FIN=1,序列号seq=u)到服务器端,并进入FIN-WAIT-1状态;
(2)服务器端收到连接释放报文,发送确认报文(确认位ACK=1,确认号ack=u+1,序列号seq=v)给客户端,并进入CLOSE-WAIT状态。此时,客户端到服务器方向的传输释放,处于半关闭状态,但服务器端依旧可以向客户端发送数据。客户端收到服务器端的确认报文后,进入FIN-WAIT-2状态,等待服务器端发送连接释放报文;
(3)服务器端将最后的数据发送完毕后,向客户端发送连接释放报文(终止位FIN=1,确认位ACK=1,确认号ack=u+1,序列号seq=w),并进入LAST-ACK状态;
(4)客户端收到服务器端的连接释放报文后,发送确认报文(确认位ACK=1,确认号ack=w+1,序列号seq=u+1)给服务器端,并进入TIME-WAIT状态,在经过2MSL时间后,撤销TCB,进入CLOSED状态。
参考:https://blog.csdn.net/u011957758/article/details/72353485
5.UDP和TCP的区别
角度 | TCP | UCP |
---|---|---|
是否连接 | 面向连接(发送数据前需要建立连接) | 无连接(发送数据无需连接) |
是否丢包重试 | 实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制 | 不会进行丢包重试,也不会纠正到达的顺序 |
模式 | 流模式(面向字节流) | 数据报模式(面向报文) |
对应关系 | 一对一 | 支持一对一,一对多,多对一和多对多的交互通信 |
头部开销 | 最小20字节 | 只有8字节 |
可靠性 | 全双工非常可靠、无差错、不丢失、不重复、且按序到达 | 不保证可靠交付,不保证顺序到达 |
拥塞控制 | 有控制 更多详情 | 有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) |
资源要求 | TCP程序结构较复杂,较多 | UDP程序结构简单,少 |
6.HTTP与HTTPS有什么区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全;
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。 SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密。
1、https协议需要到CA (Certificate Authority,证书颁发机构) 申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
7.通过URL地址显示主页的过程
参考:
https://developer.51cto.com/art/201906/597961.htm
https://blog.csdn.net/includei/article/details/104680184