网络基础HTTP/TCP/UDP协议

TCP/IP体系结构

TCP/IP是一个四层的体系结构,它包含:应用层、运输层、网际层和网络接口层。
对体系结构学习时,一般以最右侧的五层模型为切入点:应用层、运输层、网络层、数据链路层、物理层。
TCP/IP结构中各层的解释以及作用,并结合生活中寄快递的例子说明。

应用层

应用层是体系结构中的最高层。应用层的任务是通过进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程指的是主机中正在运行的程序,对于不同的网络应用需要有不同的应用层协议。互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。我们把应用层交互的数据单元称为报文(message)。

寄快递第一步,我们会选择一个快递点,快递点的存在就是面向用户直接提供服务,提供服务需要遵循一定的规则和标准,比如收费标准。
这里可以把快递点想象为应用层,把快递点遵循的标准想象成HTTP/HTTPS协议。

运输层

运输层的任务就是负责向两台主机中进程之间的通信提供数据传输服务。
运输层主要使用以下两种协议:
传输控制协议TCP(Transmission Control Protocol):提供面向连接的、可靠的数据传输服务。
用户数据报协议UDP(User Datagram Protocol):提供无连接的、尽最大努力的数据传输服务。
TCP和UDP协议都有固定的格式,数据在经过运输层时会根据所选择的运输协议,在应用层传递过来的数据基础上加上对应协议的头部。

寄快递第二步,快递点会把快递运输到转运中心,转运中心遵循一定的规则和标准把快递运到中转城市的转运中心。
这里可以把转运中心想象为运输层,把转运中心遵循的规则想象成TCP/UDP协议。

网络层

网络层主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择、拥塞控制和网际互连等。
在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因为分组也叫IP数据报,简称数据报。
数据在经过网络层时会加上IP协议的头部

寄快递第三步,快递运输到中转城市的转运中心,中转的转运中心遵循一定的规则和标准把快递运到目的城市的转运中心
这里可以把中转转运中心想象为网络层,把中转转运中心遵循的规则想象成IP协议。

数据链路层

两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息。

寄快递第四步,快递到达目的城市转运中心,目的城市转运中心遵循一定的规则和标准把快递送到快递点。
这里可以把目的城市转运中心想象为数据链路层,把目的城市转运中心遵循的规则想象成数据链路层的按帧传输。

物理层

利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
物理层上所传输数据的单位是比特。

寄快递第五步,快递到达快递点,快递点遵循一定的规则和标准派送快递。
这里可以把快递点想象为物理层,把快递点遵循的规则想象成物理层的按比特传输。


通信传输流.png

HTTP协议

HTTP协议是什么?

HTTP和HTTPS协议是应用层中遵循的协议。HTTP即超文本传输协议(HyperText Transfer Protocol),它定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器,是处理客户端和服务端之间的通信。

HTTP协议是封装了TCP协议的一种在浏览器中遵循的协议,我们通过浏览器请求一个网站,先是通过浏览器请求DNS服务器获取到一个域名对应的IP,再由客户机利用HTTP协议请求IP求获取服务器上的资源,进行展示。

HTTP常见的请求头

image.png

Host:主机和端口号
Accept-Encoding:文件编解码格式
Cookie:Cookie
Connection:链接类型
Accept:传输文件类型
User-Agent:浏览器名称
Referer:页面跳转处
Accept-Language:语言
X-Requested-With:XMLHttpRequest(Ajax异步请求)

HTTP协议的状态码

2xx状态码

200 成功

3xx状态码

300 Multiple Choices 用户请求了都个选项的资源
301 Moved Permanently 永久转移
302 Found 资源被找到
303 See Other 可以使用GET方法在另一个URL找到资源
304 NOT Modified 没有修改
305 Use Proxy 需要代理
307 Temporary Redirect 临时重定向
308 Permanent Redirect 永久重定向

4xx状态码

400 Bad Request 请求格式错误
401 Unauthorized 没有授权
402 Payment Required 请先付费
403 Forbidden 禁止访问
404 Not Found 没有找到
405 Method Not Allowed 方法不被允许
406 Not Acceptable 服务端可以提供的内容和客户端期待的不一样

5xx状态码

500 Internal Server Error 内部服务器错误
501 Not Implemented 没有实现
502 Bad Gateway 网关错误
503 Service Unavailable 服务不可用
504 Gateway Timeout 网关超时
505 HTTP Version Not Supported 版本不支持

TCP协议

TCP协议是什么

TCP协议是面向连接的、可靠的、基于字节流的传输层协议。

TCP协议的三次握手

TCP连接的建立需要解决以下三个问题:
1.使TCP双方能够确知对方的存在
2.使TCP双方能够协商一些参数
3.使TCP双方能够对运输实体资源进行分配

三次握手过程:
三次握手也就是TCP客户端和服务器建立连接的过程
1.由客户端的某个进程主动发起TCP连接建立,最初两端的TCP进程都处于关闭状态
2.TCP服务器被动等待客户进程的TCP请求,所以TCP服务器进入监听状态
3.TCP客户进程向TCP服务器进程发送TCP建立连接请求报文段,并且进入同步已发送状态
4.TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,32位序列号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。
5.TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并且进入同步已及接收状态,该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置了一个初始值y,作为TCP服务器进程选择的初始序号,确认号字段ack的值被设置成x+1,表明接收到了TCP客户进程序号为x的报文。
6.TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并且进入连接已建立状态,报文段首部中的确认位ACK设置为1,表明这是一个普通的TCP确认报文段。序列号字段seq设置为x+1确认号字段ack的值被设置成y+1,表明收到了TCP服务进程序号为y的报文,TCP服务器进程收到该确认报文段后也进入连接已建立状态

翻译成大白话就是:

客户端:发起连接请求 (1次握手)
服务器:同意连接,请确认(2次握手)
客户端:我确认了,可以连接了(3次握手)此时客户端连接建立
服务器收到确认后也进入连接建立状态

为什么是三次握手,不是两次握手?
假设TCP客户进程发送了一个TCP请求报文段,但是该报文段在网络节点中被长时间滞留了,TCP客户采用超时重传机制重发TCP请求报文段并且被TCP服务进程接收,TCP服务进程发送一个TCP连接请求确认报文段,然后TCP服务进程和客户进程可以进行数据的传输,数据传输完成以后双方都处于关闭状态。
随后滞留在网络节点中的那个失效的TCP请求报文段被TCP服务进程接收,TCP服务进程又发送一个连接请求确认报文段,并且进入连接已建立状态,由于TCP客户进程并没有发起新的TCP连接请求,并且已经处于关闭状态了,因此不会理会TCP服务器发送的报文段,但是服务器已经进入了连接已建立的状态,就会一直等待客户端发来数据,将会浪费TCP服务器主机的很多资源。

TCP协议的四次挥手

四次挥手过程
TCP通过四次挥手来释放连接,数据通信结束后,TCP双方都可以释放连接。
假设由客户进程主动关闭TCP连接:
1.客户进程发送连接释放报文段,并且进入终止等待1状态
2.服务器收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段,并进入关闭等待状态,此时TCP客户进程到服务器进程这个方向的连接就释放了,这是的TCP连接是属于半关闭状态
3.TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段。
4.当TCP服务器进程没有数据要发送了之后,释放连接,TCP服务器发送TCP连接释放报文段并进入最后确认状态
5.TCP客户进程收到TCP连接释放报文段之后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态,TCP服务进程收到该报文段后就进入关闭状态。
6.TCP客户进程还需要经过2MSL(Maximum Segment Lifetime)后才能进入关闭状态,意思是最长报文段寿命,RFC793建议为2分钟。

翻译成大白话就是
客户端说:我要释放连接了 (1次挥手)
服务器说:我知道了 等我把数据发送完 (2次挥手)
服务器说:我把数据发送完了,可以释放了 (3次挥手)
客户端说:好的,我知道了(4次挥手)
服务器收到确认后,进入关闭状态
客户端等待2MSL后关闭,防止第4次的确认信息服务器没收到,一直发送。

为什么四次挥手后也不关闭连接呢?
假设客户端收到连接释放报文段,并且针对报文段发送普通的确认报文段之后就马上进入关闭状态,但是该确认报文段丢失了,服务器无法收到该确认报文段,TCP服务器就会认为客户端没有收到之前的连接释放报文段,然后服务器就会重传之前的TCP连接释放报文。由于客户端已经处于关闭状态了,不会再处理,这样就会造成TCP服务器反复发送TCP连接释放报文段,并且一直处于最后确认状态而无法关闭。因此客户端等待2MSL可以确保服务器进程收到最后一个TCP确认报文。

UDP协议

UDP(User Ddatagram Protocol)即用户数据包协议,是一种无连接的不可靠的传输协议,不需要三次握手四次挥手,适用于IP电话、视频会议等实时应用。

TCP和UDP的区别

1.TCP面向连接;UDP无连接
2.TCP传输可靠,使用流量控制和拥塞控制;UDP传输不可拍,不使用流量控制和拥塞控制,所以TCP传输比UDP要慢的多
3.TCP只能一对一通信;UDP支持一对一、一对多、多对一、多对多交互通信
4.TCP面向字节流传输;UDP面向报文传输
5.TCP首部20-60字节;UDP首部开销小,仅8字节
6.TCP适用于要求可靠传输的应用,如文件传输;UDP适用于实时应用(IP电话、视频会议、直播等)
7.TCP连接建立后,系统需要实时的维护该连接,所以TCP消耗的系统资源比UDP多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容