计网重点

网络分层模型

OSI

应用层 HTTP、FTP协议
表示层
会话层
传输层 TCP,UDP协议
网络层 (路由器)IP协议
链路层 MAC协议
物理层 (网卡、网线等)

TCP/IP

应用层 HTTP、FTP
传输层 TCP UDP
网络层 IP协议
链路层 MAC协议
物理层 (网卡、网线等)

TCP和UDP的区别

TCP和UDP都是位于传输层的协议。
很棒的参考:
参考

TCP

TCP协议报文格式:

各字段的意义

(对于报文中都熟悉的地方不多说了。)
4位首部长度/数据偏移:
占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但应注意,“数据偏移”的单位是32位字(即以4字节长的字为计算单位)。由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度(即选项字段长度不能超过40字节)。
15*4=60字节。
15*32=480位;1字节=8位;∴480/8=60位;

16位的紧急指针:
按序到达是TCP协议保证可靠性的一种机制,但是也存在一些报文想优先被处理,这时就可以设置紧急指针,指向该报文即可,同时将紧急指针有效位置位1。

16位窗口大小:
如果发送方发送大量数据,接收方接收不过来,会导致大量数据丢失。然后接收方可以发送给发送发消息让发送方发慢一点,这是流量控制。接收方将自己接收缓冲器剩余空间的大小告诉发送方叫做16位窗口大小。发送发可以根据窗口大小来适配发送的速度和大小,窗口大小最大是2的16次方,及64KB,但也可以根据选项中的某些位置扩展,最大扩展1G。

16位校验和:
发送端填充,CRC校验。如果接收端校验不通过, 则认为数据有问题(此处的检验和不光包含TCP首部也包含TCP数据部分)。

选项
长度可变,最长可达40字节。当没有使用“选项”时,TCP的首部长度是20字节。
TCP最初只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。MSS是每一个TCP报文段中数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以,MSS并不是整个TCP报文段的最大长度,而是“TCP报文段长度减去TCP首部长度”。

为什么要规定一个最大报文长度MSS呢?
这并不是考虑接受方的接收缓存可能存放不下TCP报文段中的数据。实际上,MSS与接收窗口值没有关系。我们知道,TCP报文段的数据部分,至少要加上40字节的首部(TCP首部20字节和IP首部20字节,这里还没有考虑首部中的可选部分)才能组装成一个IP数据报。若选择较小的MSS长度,网络的利用率就降低。设想在极端情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,对网络的利用率就不会超过1/41。到了数据链路层还要加上一些开销。但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片组成成原来的TCP报文段,当传输出错时还要进行重传,这些也都会使开销增大。
因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行。由于IP数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要的分片的MSS,如果改走另一条路径就可能需要进行分片。因此最佳的MSS是很难确定的。在连接过程中,双方都把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值。若主机未填写这一项,则MSS的默认值是536字节长。因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节。

TCP报文格式参考:https://blog.csdn.net/qq_32998153/article/details/79680704

1.面向连接

三次握手建立连接

2.可靠

32位序号:序号是可靠传输的关键因素。TCP将要传输的每个字节都进行了编号,序号是本报文段发送的数据组的第一个字节的编号,序号可以保证传输信息的有效性。
传输数据过程中,还加入了超时重传机制。假设主机A发送数据给主机B,主机B没有收到数据包,主机B自然就不会应答,如果主机A在一个特定时间间隔内没有收到主机B发来的确认应答,就会进行重发,这就是超时重传机制。

Question:TCP怎么保证可靠性?

  1. 序列号、确认应答、超时重传机制

    在三次握手、四次挥手的过程中可以体现出来。

  2. Flow Control(流量控制)

    通过窗口控制实现流量控制。Tcp利用窗口控制来提高速度。
    针对的是发送方和接收方速度不匹配的问题。
    经典三次冗余ACK:
    若1001-2000的数据包丢失了,后面的数据传输,ACK应答都会不断发送序号为1001的应答,发送端如果收到了三次相同的会立刻重传。
    情况2:数据包收到了,但是ACK应答丢失了,不会重传,因为如果真的丢失了,接收端会疯狂每次传输都发送1001应答。

  3. Congestion Control(拥塞控制)

    控制窗口大小
    重点:慢启动、拥塞避免、快速重传

流量控制和拥塞控制:
以多人聊天为例:
流量控制是指,友人A的讲话速率过快,你无法听清,请求他说慢一些;
拥塞控制是指,友人A、B、C同时讲话,你的大脑无法处理这么多信息,于是你要求A先说,然后B说,然后C说。

3.面向字节流

在TCP建立连接前两次握手的SYN报文中选项字段的MSS值,通信双方商定通信的最大报文长度。如果应用层交付下来的数据过大,就会对数据分段,然后发送;否则通过滑动窗口协议来控制通信双发的数据。

UDP

UDP协议报文格式:

1. 面向无连接

只需要对端的IP和端口号就可以,不需要建立连接。

2. 不可靠

没有确认机制和重传机制(就是因为没有连接),丢包了也不会返回错误提示。

3. 面向数据报/报文

应用层交给UDP多长的报文, UDP原样发送既不会拆分,也不会合并。
如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个 字节,而不能循环调用10次recvfrom, 每次接收10个字节。所以UDP不能够灵活的控制读写数据的次数和数量。

UDP是一种全双工通信协议。 UDP协议首部中有一个16位的大长度. 也就是说一个UDP能传输的报文长度是64K(包含UDP首部)。如果我们需要传输的数据超过64K, 就需要在应用层手动分包, 多次发送, 并在接收端手动拼装

4. 缓冲区

有接收缓冲区,没有发送缓冲区。
因为UDP不保证可靠性,它没有重传机制,当报文丢失时,UDP不需要重新发送。
(压根不管丢没丢,发出去就完事了,所以没有发送缓冲区,只管发出去,就算丢了也不用再次发。)

三次握手,四次挥手

三次握手

四次挥手

客户端等待2MSL意义是什么?

MSL的含义

概念:MSL是“报文最大生存时间”

C向S发送ACK最大用1MSL,如果报文丢失了,S会重新发送FIN,最大也是花费1MSL,所以要等如果2MSL内S没有再次发送FIN,则说明C可以顺利关闭。

MSL可以修改吗?

可以。

Socket

Socket是什么?

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

socket

HTTP

1、HTTP报文格式

报文格式

2、HTTP通信传输

3、HTTP传输特点

  1. 无状态

    协议对客户端没有状态存储,对事物处理没有“记忆”,比如访问一个网站需要反复进行登录操作(所以很多爬虫)。

  2. 无连接

    HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。

  3. 基于请求和响应

    基本特性,由客户端发起请求,服务器端进行响应

  4. 通信使用明文,请求和响应不会对通信进行确认

    无法保证数据的完整性。

  5. 快速

    由于以上的特点,不需要确认什么的,就很快,送就完事了。

4、HTTP协议端口

80端口

HTTPS

1、HTTPS传输特点

基于HTTP协议、通过SSL或者TLS提供加密处理数据、验证对方身份以及数据完整性的保护。(身披SSL外壳的HTTP)

  1. 内容加密

    采用混合加密技术。

  2. 验证身份

    通过证书,认证客户端访问的是自己的服务器。

  3. 保护数据完整性

    防止中间人冒充或篡改。

2、SSL建立连接过程

SSL建立连接过程

3、数字证书内容

包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。

question:第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?

(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

4、认证过程

5、验证证书安全性过程

  1. 当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要。
  2. 然后证书签名的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。

6、HTTPS协议端口

443端口

IP地址

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

MAC地址

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。