网络的七层结构:
应用层[Application layer](应用协议数据单元APDU): 通过应用进程间的交互来完成特定的网络应用,为操作系统或网络应用程序提供访问网络服务的接口
包含的协议: DNS协议(域名系统,映射域名和IP地址) HTTP协议 SMTP协议(支持电子邮件)
应用层交互的数据单元: 报文
表示层[Session layer]: 信息的语法语义以及它们的关联, 如加密解密、转换翻译、压缩解压缩。
会话层(不同机器上的用户之间建立以及管理会话。
运输层Transport layer: 负责两台主机进程之间需要的通用的数据传输服务
包含的协议:
TCP协议(Transmission Control Protocol 传输控制协议): 面向连接的,可靠的数据传输服务
UDP协议(User Datagram Protocol 用户数据协议): 无连接的数据传输服务
TCP 和 UDP的区别:
UDP是面向报文的,无连接的。TCP是面向连接的(类似打电话)。UDP在传送数据之前不需要先建立连接,远程主机在收到UDP报文后,不需要给出任何确认。
UDP支持一对一、一对多、多对一和多对多的交互通信。每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
UDP尽最大努力交付,但不保证可靠交付,也不需要维持复杂的链接状态。 TCP提供可靠交付服务。通过TCP链接传送的的数据可以保证无差错,不丢失,不重复,并且按照序列送达。
UDP的头部开销小, 只有8个字节, TCP有20个字节
UDP没有拥塞控制,网络出现拥堵不会使源主机发送率降低
TCP面向字节流, Stream指的是流入进程或从进程流出的字节序列。面向字节流表示虽然应用程序和TCP的交互是一次一个数据块, 但TCP把应用程序交下来的数据仅看做是一连串无结构的字节流。
应用场景不同: UDP多应用于实时应用游戏,直播,QQ语音 TCP用于精确场景, 例如文件传输、发送和接收邮件、远程登录等场景。
网络层(Packet): 负责为分组交换网上的不同主机提供通信服务
数据链路层(Frame): 两台主机之间的数据传输,将比特组装成帧和点到点的传递,完成物理地址寻址、数据的成帧、流量控制、数据的检错+重发。每一帧包括数据和必要的控制信息(同步信息, 地址信息, 差错控制)。控制信息能够使得接收端知道一个帧从哪个比特开始到哪个比特结束。保证能够正确提取数据,同时还能检测到所在的帧当中是否有差错。同时还要纠正链路层传输时出现的差错,需要可靠性传输协议来纠正差错。
物理层(Bit): 通过媒介传输比特,确定机械及电气规范
网络的三次握手和四次挥手
三次握手:需要确认 发送端和接收端要分别确认 发送端和接收端 发送 接收正常 + 接收端 发送 接收正常 4个确认 * 2 = 8个确认 ABCD A'B'C'D'
A: 发送端确认本方发送正常
B: 发送端确认本方接收正常
C: 发送端确认对方发送正常
D: 发送端确认对方接收正常
A':接收端确认本方发送正常
B':接收端确认本方接收正常
C':接收端确认对方发送正常
D':接收端确认对方接收正常
发包:本方发送正常
收包 + 发回应包: 对方发送正常 + 本方接收正常 + 本方发送正常
谁收包谁确认
1.发送端 -> 接收端:发送标有SYN的数据包 -> 握手表示: 发送端的包接收端收到 -> 接收端确认对方发送正常(C') + 接收端接收本方接收正常(B')
2.接收端 -> 发送端:接收端收到了你发给我的数据包 + 发送标有SYN/ACK的数据包 -> 握手表示: 接送端的包发送端收到 -> 发送端确认本方接收正常(B) + 发送端确认本方发送正常(A) + 发送端确认对方发送正常(C) + 发送端确认对方接收正常(D)
3.发送端 -> 接收端:发送标有ACK的数据包 -> 握手表示:发送端的包接收端收到 -> 接收端确认本方发送正常(A') + 接收端确认对方接收正常(D')
三次握手的目的: 确认自己与对方的发送与接收都是正常的
四次挥手: 任何一方都可以在数据传输结束后发送连接释放的通知, 待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭TCP连接。
主动关闭方 -> 被动关闭方: FIN
被动关闭方 -> 主动关闭方: ACK
主动关闭方 -> 被动关闭方: FIN
被动关闭方 -> 主动关闭方: ACK
为什么需要三次握手?
为了防止“已失效的连接请求报文段”突然又传送到了B。假设A向B发送了连接请求,但这个连接请求报文没有及时到达B,则A因为没有收到B的确认而重新发送一个连接请求报文,B确认后连接建立,然后进行一系列数据交换后关闭的连接。但此时之前A发送的连接请求报文突然到达了B,则B会对此发送确认,如果采用两次握手,那么此时AB又建立了连接,而A并没有数据向B发送,白白浪费B的资源。采用三次握手则不会出现这种情况,因为B向A发送确认时,A不会再给B发送确认,连接不会建立。
TCP如何保证可靠传输
应用数据被分割为TCP所认为的何时大小的数据块
TCP给发送的每一个包进行编号, 接收方对数据包进行排序, 把有序数据传送给应用层
校验和(checkSum) TCP将保持首部和数据的校验和。 这是一个端到端的检验和, 检测数据在传输过程中的任何变化
TCP的接收端会丢弃重复的数据
流量控制: TCP链接的每一方都有固定大小的缓冲空间, 减低发送速率可以防止包丢失
拥塞控制: 网络拥塞时,减少数据的发送
停止等待协议: 每发完一个分组就停止发送, 等待对方确认,在确认后再发送下一个分组。超时重传: 当TCP发出一个段后,启动一个定时器, 等待目的端确认收到这个报文段。如果不能及时收到确认,会重发这个报文。
IP协议
不可靠: 并不保证IP数据报文能成功到达目的地。如果发生错误,直接丢弃该数据报文,然后发送ICMP消息报给信源端,任何可靠性必须由上层提供
无连接:IP并不维护任何关于后序数据报文的状态消息,每个连接都是独立的。所以IP数据报文可以不按照发送顺序接收。
应用层协议与传输层协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
传输层协议和应用层协议的区别
传输层协议主要用于主机的进程与进程之间的相互通信,而网络层协议主要应用于主机与主机之间的相互通信。
在浏览器输入一个网址后执行的全部过程
DNS解析IP地址。客户端浏览器发起一个HTTP会话到IP地址,然后通过TCP进行封装数据包,输入到网络层
在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,入服务器使用80端口监听客户端请求,客户端由系统随机选择一个端口(6000)与服务器交换,服务器把轻盈的请求返回给客户端的6000端口,然后使用IP层的IP地址查找目的端。
网络端的网络层不关心应用层和传输层的东西,主要做的是通过查找路由表确定如何到达服务器, 期间可能经过多个路由器。
链路层: 跑通过链路层发送到路由器,查找IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换IP数据包可以传输,然后发送IP数据包到达服务器的地址
字节号和序号
字节号:TCP是面向字节流的,因此TCP会对字节数据进行编号,即每一个字节数据都会有一个编号,这个编号就叫字节号,编号的范围是:0 ~ 2^32-1,需要注意的是TCP对字节数据编号不是从0和1开始的,而是根据系统内核机制来随机编号的。
序号:前面我们说过序号是针对数据段的,由主机发送的这6000字节数据以数据段为单位,封装成多个大小不同的tcp数据段报文在网络中传输。因为序号是基于字节号的,所以tcp协议会给每个tcp数据段报文分配一个序号,而这个序号就是tcp数据段报文的第一个字节的编号(字节号)。
TCP对于数据的封装
假如第一个字节的编号为110
那么第一个报文的字节号范围:110 ~ 1109
第二个报文的字节号范围:1110 ~ 2109
第三个报文的字节号范围:2110 ~ 3109
第四个报文的字节号范围:3110 ~ 4109
第五个报文的字节号范围:4110 - 6109
HTTP状态码
1XX Informational
2XX Success
3XX Redirection
4XX Client Error
5XX Server Error
拥塞控制
拥塞: 某段时间内,网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变差, 这种情况叫做拥塞。
拥塞控制是一个全局性的过程,涉及所有的主机 + 路由器 + 降低网络传输性能有关的因素。而流量控制是点对点通信量的控制,是端到端的问题。流量控制要做的就是一直发送端发送数据的速率。
TCP控制拥塞的方法,使用拥塞窗口(cwnd)状态变量。
四种拥塞控制算法:
慢开始: 以×2的速度逐渐增大cwnd取值
拥塞避免: 没经过一个往返时间RTT就把cwnd+1
快重传 + 快恢复(FRR fast retransmit and recovery): 快速回复丢失的数据包 没有FRR的情况下,如果数据包丢失,TCP将会使用定时器来要求传输暂停。在暂停的时间段内,没有新的数据包被发送,有了FRR, 如果接收器接收到一个不按顺序的数据段,它会立即给发送端发送一个重复确认,如果有收到三个重复确认,发送端就假定确认信息提到的包丢失了,立即重传这些丢失的数据段。有了FRR, 就不会因为重传时要求的暂停被耽误。 优点: 当有单独的数据包丢失时
网络层也可以让路由器采用适当的分组丢弃策略(如主动队列管理)
待整理的题目:
HTTPS的握手, HTTPS的请求
参考文章