详解TCP与UDP
TCP与UDP区别
- TCP(Transmission Control Protocol)传输控制协议
是面向连接的,提供可靠的,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),只提供点到点一对一之间的通信
- UDP(User Datagram Protocol)用户数据报协议
是无连接的,尽最大可能交付,没有拥塞控制,面向报文的(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
TCP与UDP首部格式

UDP 首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。

主要标志位
**序号:**用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
**确认号:**期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
**ACK:**该位设为 1,确认应答的字段有效,TCP规定除了最初建立连接时的 SYN 包之外该位必须设为 1;
**SYN:**用于建立连接,该位设为 1,表示希望建立连接,并在其序列号的字段进行序列号初值设定;
**FIN:**该位设为 1,表示今后不再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段。
TCP三次握手与四次挥手

三次握手的过程
Client将SYN标志位置为1,表示现在我要请求连接,并且生成随机的序号值J,将数据包发送给Server,Client进入SYN_SENT
状态,等待Server确认Server确定Client发送没有问题
Server接受到数据包以后,发现,SYN标志位是1,那么就知道是Client在请求连接,于是Server就把标志位SYN与ACK都置位1,ack: j+1,ack是确认号,随机产生序号seq=K,Server进入SYN_RCVD状态Client确定Server接收和发送都没有问题Client收到确认以后,检查ack是否是j+1,ACK是否为1,如果都正确的话,Client将数据包发送给Server,Server确认ack=K+1,ACK=1则正确建立连接,Client与Server都进入ESTABLISHED状态Server确定Client接收没有问题
这时候双方接收发送都没有问题,建立连接
这也是为什么只需要三次握手,三次就可以确定双方的收发功能没有问题,多了浪费少了不行
四次挥手的过程
-
Client发送FIN段和当前序号seq=x,表示Client希望断开连接,Client_1`状态 -
Server接收到FIN后,进入CLOSE_WAIT状态,发送ACK=x+1表示我收到你的断开请求,当Client收到应答回复后进入FIN_WAIT_2状态,此时==Client发送断开,Server接收断开== -
此时
Server还是可以继续发送没有发送完的数据,当数据发送完后Server发送FIN段和当前序号seq=y,同时进入LAST_ACK状态, -
Client接收到Server的FIN报文后,确认序列号y+1,客户端进入TIME_WAIT状态。这时候Server端的发送断开 -
等待2ms(报文最大生存时间)后
Client断开Client接收自动断开
关于2ms等待状态
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。
因为TCP连接时全双工的,因此,每个方向都必须要单独进行关闭
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
等待2ms的意义
- 保证客户端发送的最后一个ACK报文段能够到达服务端。 这个ACK报文段有可能丢失,使得处于
LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,服务端超时重传FIN+ACK报文段,而客户端能在2MS时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都进入到CLOSED状态,若客户端在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务端重传的FIN+ACK报文段,所以不会再发送一次确认报文段,则服务端无法正常进入到CLOSED状态。 - 防止“已失效的连接请求报文段”出现在本连接中。 客户端在发送完最后一个
ACK报文段后,再经过2MS,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
TCP协议如何保证可靠传输
- 序列号、确定应答、超时重传
收到了数据就会**确认应答**并且会确定下一次要接收数据的序列号,如果客户端迟迟没有收到应答,那么就会进行重传
- 窗口控制与快速重传
窗口控制是为了提高传输速率的,就是说在窗口内的数据不用等待应答确定就可以进行发送,使用窗口控制,在窗口数据丢发送端会收到三次相同的应答,发送端就会立即重发
- 拥塞控制
分为: 慢启动,拥塞避免,快速重传
慢启动: 就是一开始让窗口的大小设为1,之后每收到一个应答窗口的大小就变成之前的两倍
拥塞避免: 也就是说上面的慢启动的窗口我们不可能让他指数级上升,这时候就设置一个慢启动阈值,当窗口的大小到达这个阈值之后,那么就改用加法增加窗口大小,每次加1
快速重传: 就是窗口内的数据收到了3次重复的应答这时候发送端就会立即重传,窗口大小变成当前窗口的一半
HTTP与HTTPS的区别
HTTP:== 超文本传输协议==
HTTPS:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,HTTPS 在HTTP 的基础下加入TLS/SSL
区别:
HTTP未进行加密,是明文传输。不安全 而HTTPS=HTTP+SSL构建的加密传输,身份认证的网络协议,比HTTP要安全HTTPS需要申请证书用于身份验证,所以需要一些费用HTTP的端口是80,HTTPS端口是443HTTPS在进行TCP三次握手操作后害还得进行SSL``handshake,虽然会有更高的延时和更大的资源消耗,但是HTTPS更加的安全同时也能保证数据发送到正确的服务器和用户
将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。 公钥加密计算量太大,如何减少耗用的时间? 每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
(1) 客户端向服务器端索要并验证公钥。 公钥和私钥是非对称加密的,公钥是公开的
(2) 双方协商生成==“对话密钥”,对话秘钥是对称加密的==。
(3) 双方采用"对话密钥"进行加密通信。上面过程的前两步,又称为"握手阶段"(handshake)。
什么是STL/SSL
SSL代表==安全套接字层。==它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;
加密和解密都使用同一个密钥的是对称加密
对称加密:优点在于加密、解密效率通常比较高 ,HTTPS 是基于非对称加密的, 公钥是公开的,
DNS(Domain Name System)域名系统
一个域名和ip相互映射的分布式数据库
有点像arp可以将mac地址和ip进行相互映射
应用层协议,用的是UDP传输,因为快只需要一个请求一个应答
DNS域名解析全过程
解析是一个递归的过程
(1) 查找浏览器缓存是否有域名ip对于
(2) 在本机host文件查询
(3) 向本地DNS服务器进行查询
(4) (没找到)本地DNS服务器向根服务器进行查询
(5) (最后还是没找到)本地DNS服务器向域名解析服务器取进行查询。
所有得到了ip与域名对应的地面都会缓存一份以备下次使用
服务器间进行域传输的时候用TCP
客户端查询DNS服务器时用 UDP

所以当浏览器地址栏输入URL按下回车后会发生什么
- 根据域名解析出ip地址
- 根据ip地址建立
TCP连接 - 向ip地址发送
HTTP请求 - 服务器处理请求
- 返回响应结果
- 关闭
TCP连接 - 浏览器解析
html并进行布局渲染
Cookie与Session
网络模型结构

简要概括:
- 物理层: 底层数据传输,网卡
- 数据链路层: 定义数据的基本格式,如何传输,如何标识,如mac
- 网络层: 定义IP编址,定义路由功能
- 传输层: TCP/UDP端到端数据传输功能
- 应用层: 各种应用软件
七层模型是一个标准而非实现,四层模型是一个实现的应用模型

本文详细介绍了TCP与UDP的区别,包括TCP的三次握手与四次挥手过程,以及它们如何确保可靠传输。同时,探讨了HTTP与HTTPS的安全性差异,解释了SSL/TLS协议的作用。此外,还涵盖了DNS域名解析流程和Cookie与Session的概念。
1736

被折叠的 条评论
为什么被折叠?



