网络的七层结构:
- 应用层[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支持一对1、一对多、多对一和多对多的交互通讯。每一条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所认为的什么时候大小的数据块
- TCP给发送的每个包进行编号, 接收方对数据包进行排序, 把有序数据传送给应用层
- 校验和(checkSum) TCP将保持首部和数据的校验和。 这是一个端到端的检验和, 检测数据在传输过程当中的任何变化
- TCP的接收端会丢弃重复的数据
- 流量控制: TCP连接的每一方都有固定大小的缓冲空间, 减低发送速率能够防止包丢失
- 拥塞控制: 网络拥塞时,减小数据的发送
- 中止等待协议: 每发完一个分组就中止发送, 等待对方确认,在确认后再发送下一个分组。超时重传: 当TCP发出一个段后,启动一个定时器, 等待目的端确认收到这个报文段。若是不能及时收到确认,会重发这个报文。
IP协议
- 不可靠: 并不保证IP数据报文能成功到达目的地。若是发生错误,直接丢弃该数据报文,而后发送ICMP消息报给信源端,任何可靠性必须由上层提供
- 无链接:IP并不维护任何关于后序数据报文的状态消息,每一个链接都是独立的。因此IP数据报文能够不按照发送顺序接收。
应用层协议与传输层协议

TCP对应的协议:post
(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服务。操作系统
传输层协议和应用层协议的区别

传输层协议主要用于主机的进程与进程之间的相互通讯,而网络层协议主要应用于主机与主机之间的相互通讯。.net
在浏览器输入一个网址后执行的所有过程
- 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的请求
参考文章
搞定计算机网络