计算机网络知识
一、互联网的组成与网络传输方式
1) 网络将主机连接起来,而互联网把多种不同的网络连接起来,所以互联网就是网络的网络。
2)互联网的组成:
* 边缘部分:所有连接在互联网上的主机,用户可以直接使用
* 核心部分:由大量的网络和连接这些网络的路由器组成,为边缘部分的主机提供服务。
3)计算机之间的通讯方式:
- 客户端-服务器方式(C/S)
- P2P(对等,不区分客户端与服务端)
4)计算机网络体系结构
注:每一层负责不同的通讯功能
数据链路层:数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
网络层:网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。
传输层:第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和
流量控制问题。
会话层:会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
应用层:为操作系统或网络应用程序提供访问网络服务的接口。
二、物理层
1)通信方式
* 单向通信
* 双向交替通信。又称为半双工通信
* 双向同时通信,又称为全双工通信
三、网络层
* 网络层作为整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
* IP协议提供不可靠、无连接的服务,不可靠指的是不能保证IP数据包能够成功到达目的地;无连接表示IP数据报并不维护任何关于后续数据报的状态信息。
使用IP协议可以把整个异构的物理网络连接起来,使得在网络层看起来是一个统一的网络。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP(Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
四、运输层
网络层为主机之间提供逻辑通信,运输层为应用进程之间提供端到端的逻辑通信。运输层的两个主要协议:TCP(传输控制协议) UDP(用户数据包协议)
1、TCP
1)TCP主要特点:
-面向连接的传输层协议:传输之前确保通信
-每一条TCP连接只能由两个端点
-可靠交付
-全双工通信:
-面向字节流
TCP:将要传输的文件分段,建立会话,可靠传输,流量控制
2)TCP首部格式:
序号(Sequence numbe):用于对字节流进行编号,例如序号为101,表示第一个字节编号为101,如果携带的数据长度为100个字节,那么下一个报文段的序号为201
确认号:期望收到的下一个报文段的序号。例如B收到A发送的报文段,序号为101,数据长100个字节,那么B期望收到的报文段的序号为201,确认号就是201
数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认ACK(Acknowledgement Numbe):当确认ACK=1时,确认号才有效,否则无效。TCP协议规定在建立连接后所有传送的报文段都必须将ACK设置为1
同步SYN:在建立连接时用于同步序号。当SYN=1 ACK=0时表示这是一个请求建立连接的报文段;若对方请求建立连接,则回应报文的SYN=1 ACK=1
终止FIN:用于释放一个连接。当FIN=1表示报文段的发送方的数据已经发送完毕,并要求释放连接。
Window Size:窗口大小,表示还能接收多少字节的数据,用于流量控制
3)TCP的三次握手
* 首先客户端处于LISTEN状态,客户端发送连接请求报文段,随后客户端进入SYN-SENT状态。
* 服务器接收到连接请求报文后如果统一则发送统一建立连接的报文段后进入SYN-RECEVIED状态
* 客户端接收到同意建立连接的报文段后发送一个确认的报文段,随后进入ESTABLSHED状态,服务器接收到确认报文段后也进入ESTABLISHED状态,
此时连接成功建立。
为什么两次握手就可以建立连接,还需要第三次应答?
防止失效的请求被服务器接收从而出现错误。例如:当客户端发送请求连接报文段,由于网络延迟服务器没有收到,那么客户端会再次发送一个请求连接报文段,
服务器接收第二次的请求连接报文段后同意建立连接,操作结束后释放连接。此时第一次的请求连接报文到达服务器,没有第三次握手时,服务器在发送同意
建立连接后不需要确认直接建立连接,等待客户端发送数据,而此时客户端并没有发送连接请求,所以不会理会这个同意连接请求报文的回应,不会发送数据,
服务器却以为建立了连接一直在等待,浪费了资源。
4)TCP的四次挥手
* 数据传输完成后,客户端先向服务器发送释放连接的报文段,停止发送数据,并主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态。
* 服务器收到释放连接的报文段后,发送确认释放连接的报文段,进入CLOSE-WAIT状态。TCP进入半关闭状态,服务器可以向客户端发送,但是客户端不能
向服务器发送数据。
* 服务器发送完最后的数据后向客户端发送释放连接的报文段,进入LAST-ACK(最后确认)状态
* 客户端接收的释放连接的报文段后发送最终的确认释放连接报文段,进入TIME-WAIT状态,等待约2MSL后进入CLOSED状态。
服务器接收到确认报文段后立即进入CLOSED状态。
为什么客户端要有TIME-WAIT状态而不直接进入CLOSED?
* 因为要确认服务器一旦受到最后的确认。如果服务器没有收到最后的确认报文段,会再次发送释放连接的报文段。
* 可能存在“已失效的连接请求报文段”,为了防止这种报文段出现在本次连接之外,等待2MSL后就可以使本连接持续的时间内所产生的所有的报文段都消失。
4)实现可靠传输的原理?
停止等待协议:就是每发送完一个分组就停止发送,并等待对方的确认。
超时重传:大于一个往返时间,没有收到确定消息按照没有收到处理,重新发送
确认丢失:丢弃重复的报文段,重新发送确认报文段。
确认迟到:丢弃迟到的报文段
自动重传请求ARQ:这个确认重传机制保证了在不靠谱的网络上实现可靠的通信,这个可靠的传输协议被称为自动重传请求ARQ。表明重传时的请求是自动的
缺点:需要等待,浪费资源。
连续ARQ:在没有收到应答的情况下,持续发送窗口中的数据。而当发送方收到一个确认后,就将窗口向后滑动。
优点:利用了累计确认,如果和自动请求ARQ那样收到一个请求就发送一个确认太浪费资源,可以在接收到多个请求后进行统一的回复。
缺点:例如收到了序号为5的字节,并未收到序号为6的报文,然而序号为7及之后的报文也已经接收。这时ACK只能回复6,所以发送端只能重复发送序号为7及
之后的数据。
2、UDP
UDP主要特点:
-无连接的,即发送数据之前不需要建立连接
-使用最大努力交付,即不保证可靠交付,也不使用阻塞控制
-面向报文的。没有阻塞控制,很适合多媒体通信的要求
-支持一对一,一对多,多对多的交互通信
-首部开销小,只有8个字节
UDP:一个数据包就能够完成传输,不分段,不建立会话,不需要流量控制,进行不可靠传输
例如:向DNS发送请求进行域名解析,使用UDP协议丢包则再次发送即可
QQ聊天使用UDP协议
QQ文件传输使用TCP
邮件--TCP协议
屏幕广播 多播-即使一个数据包不能完成,但是由于不建立会话,所以使用的是UDP
五、应用层
1、域名系统DNS
域名系统是为了使用IP地址更加简单和方便记忆,而对其进行的一种映射。
应用层一般使用的是域名,在网络层中进行数据传输时才将域名转换为在路由中使用的IP地址
用户通过域名服务器将域名转换为IP地址供网络使用,DNS中大部分域名都在本地解析,只有少数域名需要在互联网上进行解析。
2、万维网WWW
WWW是基于客户机和服务器方式的信息发现技术和超文本技术的综合。
WWW服务器通过HTML(超文本标记语言)将信息组成图文并茂的超文本,利用链接从一个站点跳转到另一个站点
* 利用统一资源定位符URL标记资源所在的位置
URL格式:协议://主机名(域名)://端口号/路径
端口号默认为80,路径指文件的在主机中的位置
* 利用链接的方式进行各个站点之间的连接。
* 利用HTML描述页面
* 利用超文本传输协议进行文档的传输工作
* 利用客户端-服务器的方式进行工作(客户端向服务器发送请求,服务器将客户端请求的资源返回)
3、HTTP(超文本传输)协议
1) HTTP提供了访问超文本的信息的功能,是WWW中浏览器和服务器之间应用层的协议。WWW使用HTTP传输各种超文本信息和数据。
2) HTTP协议会话过程:
- 建立连接:客户端向服务器发送建立连接的请求,服务器给出应答后连接建立完成
— 发送请求:客户端根据协议的要求通过连接向服务器发送自己的请求
3) HTTP的报文结构
* 请求报文:
- 请求行:包括请求方法、请求路径 使用的协议
- 请求头:格式为key:value
- 请求主体:要发送的信息,可以没有
请求头结束和请求主体之间有一个空行
* 响应报文:
- 响应行:协议版本 状态码 状态文字
- 响应头:key:value
- 响应主体:有些可以不用
4)GET请求与POST请求的不同
* GET是从服务器获取数据;POST向服务器提交数据
* GET将请求的数据以?连接到URL后面,即请求的数据放在HTTP报文的请求行中;POST将提交的数据放在HTTP报文的请求体中
* GET请求的数据明文出现在URL后面,有安全隐患;POST提交的数据在HTTP请求报文的请求体中比较安全
* GET请求的数据受限于浏览器或服务器对URL长度的限制;POST请求的数据没有大小限制
5)* 状态码:反应服务器响应的状态
1XX:信息。表示服务器接收到请求,需要请求者继续执行此操作
2XX:成功。表示请求被成功请求并处理
3XX:重定向。表示需要进一步的处理以完成
4XX:客户端请求错误
5XX:服务器错误。表示服务器在处理请求时出现错误。
* 特殊状态码:
200:请求已成功,请求所希望的响应头或数据将随这响应返回
301:永久重定向
302:临时重定向
304:Not Modified,如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档中的内容自上次访问后或根据请求条件并没有发生改变,返回此状态码
304禁止包含消息体,所以其始终以消息头后的一个空行结尾。(此时会直接将上次的缓存返回给客户端,减轻了服务器的压力)
404:请求的页面不存在
500:服务器内部错误
503:服务器临时不可用
6)cookie与session