TCP/IP四层协议
imoocTCP(Transmission Control Protocol 传输控制协议)
TCP协议是计算机网络中非常复杂的一个协议。
1. 它解决了以下问题:
(1). TCP协议可靠传输
网络环境复杂,保证数据准确无误到达
(2). TCP协议流量控制
感知对方压力并控制流量(比如网卡性能差异,造成接收压力,TCP可以减缓传输,控制流量。感受接收方的压力)
(3). TCP协议拥塞控制
感知网络压力并控制发送速度(如果网络出现拥塞,TCP可以控制发送速度感受网络的压力)
2. TCP报文
imoocTCP协议是面向字节流的协议,不管传输什么数据,都需要转成字节,再传输
3. 应用场景
(1). 微信、QQ等APP消息发送接收
(2). 浏览器-服务器通信
(3). 其他可靠通信的场景
TCP的三次握手与四次挥手
(1). 三次握手
三次握手是建立连接的过程,当客户端向服务端发起连接时,会发一包连接请求数据,过去询问一下,能否与你建立连接,这包数据称为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到后回复一包ACK包,连接建立,因为这个过程中互相发送了三包数据,所以称之为“三次握手”
哔哩哔哩UP掌芝士为什么不是三次握手而不是两次握手?
这是为了防止因为已失效的请求报文,突然又传到服务器引起错误。三次握手本质上是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立可靠的连接。
三次握手之后,客户端和服务器端都进入到了传递数据的状态。
(2). 传输确认
一包数据有可能会被拆成多包发送,如何处理丢包问题?
这些数据包到达的先后顺序不同,如何处理乱序问题?
针对这些问题,TCP协议为每一个连接,建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从发送缓冲区取一部分数据组成发送报文,在其TCP协议中会附带序列号和长度。接收端在收到数据后,需要回复确认报文,确认报文中的ACK等于接受序列号加长度,也就是下一包数据需要发送的起始序列号。这样一问一答的发送方式,能够使发送端确认发送的数据,已经被对方收到,发送端也可以发送一次连续多包数据,接收端只需要回复一次ACK就可以了。这样发送端可以把待发送的数据分割成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完整的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传。
TCP连接是全双工的,对于两端来说均采用上述机制。
哔哩哔哩UP掌芝士(3). 四次挥手
假设客户端主动发起连接关闭请求,它需要将服务端发起一包FIN包,表示要关闭连接,自己进入中止等待1状态,这是第一次挥手。
服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入中止等待2状态,这是第二次挥手。
服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手。
客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。
为什么客户端需要等待超时时间?
这是为了保证对方已收到ACK包,因为假设客户端发送完最后一包ACK后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态。客户端在发送完最后一包ACK包后等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应FIN包,重发ACK包,并刷新超时时间,这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中,进行可靠的连接断开。
哔哩哔哩UP掌芝士UDP协议是非连接的,发送数据就是把数据封装一下,然后从网卡发送出去就可以了,数据包之间并没有状态上的联系,正因为UDP这种简单的处理方式,导致它的性能损耗非常少,对于CPU内存资源的占用也远小于TCP,但是对于网络传输过程中时产生的丢包,UDP协议并不能保证,所以UDP在传输稳定性上要弱于TCP
TCP vs UDP
TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如传输网络,发送邮件,浏览网页等。
UDP的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包没有太大要求的场景,比如域名查询,语音通话,视频直播等。UDP还有一个非常重要的应用场景,就是隧道网络,比如VPN,以及在SDN中用到的VXLAN.
哔哩哔哩UP掌芝士网络套接字与通信过程
进程之间的通信:HTTP协议
imooc计算机可以同时运行多个不同的进程,比如打开浏览器的同时,可以播放视频,那么如何识别是哪一个进程进行通信呢?
(1). 使用端口(Port)来标记不同的网络进程
(2). 端口(Port)使用16比特位表示0~2^16(0~65535)
imooc imooc套接字(Socket)是抽象概念,表示TCP连接的一段。
通过套接字可以进行数据发送或接收。
imoocHTTP(HyperText Transfer Protocol: 超文本传输协议)
通过HTTP协议来获取互联网资源。包含着超链接,图片,视频等多媒体的副本,这个副本可以通过HTTP协议进行传输
imooc互联网资源那么多,怎么获取 --通过地址获取
imoocHTTP请求方法:
imooc比较常用的请求方法
(1). GET: 获取指定的服务器资源
(2). POST: 提交数据到服务端
(3). DELETE: 删除指定的服务器端资源
(4). UPDATE: 更新指定的服务端资源
Web服务器工作流程
(1). 接受客户端请求:服务端接受客户端连接
(2). 接收请求报文,通过报文,服务端可以知道浏览器想要干什么,想获取或操作什么资源
(3). 处理请求
(4). 访问Web资源:通过路径去判断需要访问哪些资源
(5). 构造应答:构成应答报文
(6). 发送应答:把应答报文发送给浏览器
imoocHTTP协议的请求报文详解
请求报文的主要内容
imooc1. 请求行:不管有多少内容,都只有一行
包含:请求方法(GET,POST等),请求地址(唯一对应Web服务器的资源),HTTP版本
2. 请求头:
通信的附加信息:比如说明当前手机还是计算机
格式:<key>:<value>
常用的请求头:
imooc实例:
3. 请求内容
发送数据
数据格式是不固定的,只要客户端和服务端协商好就可以
注意:请求内容不是必须的
4. 实例
imoocHTTP协议的应答报文详解
imooc1. 状态行
状态码:三位数
imooc imooc304: 客户端缓存的数据并没有发生变化,不需要再次请求后台,可以直接使用本机缓存,即304为重定向到本机缓存
2. 应答头
和请求头类似
imooc常用的应答头
imooc3. 实例:
imooc
网友评论