知识点总结
各种地址及长度:
- 传输层,port: 2B, 0-65535
- 网络层,IP地址: 4B, 分成5类 (A类,B类,C类,D类, E类)
- 数据链路层,mac地址: 6B,一般写成12位的Hex字符串。
网络协议:
所在层级 | 协议名称 | 全称 | 作用 | 端口 |
---|---|---|---|---|
网络层 | DHCP | Dynamic Host Configuration Protocol | 分配ip地址 | — |
应用层 | SMTP | simple mail transfer protocol | email (基于tcp) | 25 |
应用层 | DNS | Domain Name System | 根据域名查询IP (基于udp) | 53 |
应用层 | POP | Post Office Protocol | authorization (agent <–>server) and download | |
应用层 | IMAP | Internet Mail Access Protocol | 从mail server获取邮件 | |
应用层 | FTP | File Transfer Protocol | 本地机器和服务器间传输文件 | 21/20 |
头部结构表示长度的
- UDP: Length: 占用2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。上层应用层的数据大小是,length - 8B
- TCP: tcp头部的header size的占用4bit,总共可以表达0-15. 单位是 4B-word.
含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部 - 网络层IP报文:
- hdr length: 占用4-bit,表示范围0-15, 单位是4B-word, 可以表达的头部长度范围是: 20-60B
- total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)
总结,对比TCP Tahoe 和 TCP Reno
- TCP Tahoe = Slow Start + AIMD + Fast Retransmit
- TCP Reno = TCP Tahoe + Fast Recovery [触发的时机: 重复的ack]
- Since TCP Reno is the extension of TCP Tahoe, the slow start and AIMD phase are the same. 对比如下:
- 最先有TCP Tahoe,现在已经基本不用了,后来提出了TCP Reno,性能会好很多。
分层结构
OSI的七层模型
各层使用的数据以及地址:
层 数据 通信 地址 物理层 比特 - Bit hop-to-hop,hop之间通信 – 数据链路层 桢 - Frame hop-to-hop,hop之间通信 mac地址 网络层 包 - Packet / Datagram host-to-host,主机之间的通信
source node to destination nodeip地址 传输层 段 - Segment process-to-process,进程之间的通信 端口 不同层对数据称呼不一样,使用的地址也不一样(往头部添加的内容不同)
OSI的七层模型,上面三层不是很熟悉,尤其是展示层(Presentation)和会话层(session)。 下面的4层熟悉一点。
相关术语
- 用于两人沟通的系统:Source – Transmitter — Transmission System – Receiver – Destination
- 网络:Source, Destination, Transmitter, Hub, Router, Wireless Access Point, Receiver
- 计算机网络:mobile network, global ISP, regional ISP, institutional network, home network
应用层
大部分应用层协议使用TCP,所以只要记住哪些协议使用了udp即可: DNS
各个应用层协议使用的端口和传输层协议
协议 端口 传输层协议 HTTP 80 tcp Mail Server 25 tcp SSH 22 tcp DNS 53 udp FTP 21-cmd, 20-data tcp
HTTP协议
需要了解报文格式 / 无状态 / 不同版本差异 / 持久和非持久连接 / Cookie / Cache / 常见状态码
- HEAD 请求方法的作用?只请求页面的首部,用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。
- 一个HEAD请求的响应可被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存就被视为过期了。
参考:https://www.jianshu.com/p/49ebc4a78474
DNS 协议
两种查询方式(iterative迭代方式,recursive),查询到后也会缓存,
- iterative方式查询域名: 除了本地计算机外,发起域名请求查询的全部是本地的DNS server。
- recursive方式,则是询问的目标server,继续发起请求,得到结果之后,再返回给本地DNS服务器。【类似于函数的递归调用】
DNS record
- Resource Record格式:(name, value, type, ttl)
- 四种类型: A or AAAA-hostname to IP, CNAME - alias name, NS-domain-to-hostname, MX-mail server
TLD and Authoritative Servers
- Top-level domain (TLD) servers: 顶级域名服务器, 例如 .com, .org, .net, .edu, .uk, .jp, .fr等等
- Authoritative DNS servers:权威域名服务器,例如:一个组织的服务器,github.com
- Local Name Server: 一般每个ISP运营商,公司,大学都有各自的server
电子邮件服务
SMTP,POP3,IMAP
- email三个组成部分: user agent, mail server, SMTP协议
- user agent (smtp client) 和mail server之间使用的协议是? HTTP, Pop3, 或者IMAP
- 这三个协议之间有什么区别?
- mail server <——> mail server 使用的是: SMTP
- SMTP 协议细节 (HELO, MAIL FROM, RCPT TO, DATA, QUIT commands 各个作用)
- DATA: indicate start of mail message. 命令之后,输入email内容
- HELO: 客户端为标识自己的身份而发送的命令(通常带域名)
- EHLO: 使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。
- MAIL FROM: 标识邮件的发件人;
- RCPT TO: 标识邮件的收件人;
- QUIT: 终止会话 (参考: https://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html)
- SMTP server uses
CRLF.CRLF
to determine end of message. [其实就是 a dot by itself on a line]
传输层
问题:传输层实现可靠传输,为什么使用sequence number?
回答:解决3个问题:丢包,包损坏, 乱序
tcp
头部信息
- tcp头部的header size的作用是?大小是4bit,总共可以表达0-15.
含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部
- tcp头部的header size的作用是?大小是4bit,总共可以表达0-15.
Sliding window protocal: 滑动窗口协议
目的:为了解决传输的不可靠性
- packet损坏了: corrupt packet
- packet顺序错乱了: out of sequence packet
- packet丢失: 使用timeout机制
- 没有timeout,怎么判断丢失了? sender收到receiver的两个相同的ack报文
- 有了timeout机制,对于sender发出的每个packet,都要启动一个timer, 当timer结束之前,收到ack则认为发送成功。否则,会重发packet。(两种超时重发策略)
- timeout expired
两种策略:
- Go-back-N 没有缓冲,直接丢弃掉corrupt packet以及之后的所有packet。【实现简单】
- Selective Repeat: 有缓冲,只丢弃corrupt packet,对于后续的packet会缓冲起来 【实现复杂】
Connection Management, 连接管理
- 三次握手
- 前面两次不能包含数据,第3次可以。
- 使用SYN 和 ACK标志: SYN; SYN, ACK; ACK.
- 四次挥手
- 发送和接收双方各自单独发起结束连接。
- 使用FIN标志,使用Timed wait来处理延迟的segment。【最后接收FIN的一方,发送的ACK,要使用time wait来处理,避免这个ack对方没有收到,从而对方再次发送FIN请求】
- 状态变迁:发起连接,等待建立连接,传输数据,结束连接。
- listen, syn_rcvd, established, close_wait, last_ack, closed
- 三次握手
TCP Congestion Control, 拥塞控制
- 网络拥堵的两个表现:丢包(lose packets) 和 长延时 (long delays)
- 解决拥塞的方法:
- 网络协助: 路由器给终端计算机反馈拥堵情况
- 端到端系统控制: [TCP采用]
- 逐步增加(幅度小)窗口大小,当有包丢失时,缩减窗口大小(幅度大)
- Additive-Increase Multiplicative-Decrease (AIMD)
- 如何知道Loss event? Timeout 或者 重复的Ack
- TCP传输的不同阶段
- 慢开始 (Slow start)
- 拥塞避免 (Congestion Avoidance)
- 拥塞控制 (Congestion Control)
- 快重传 / 快恢复 (Fast Retransmit / Recovery) 【只在TCP reno中出现,只跟dup acks关联】
- TCP Tahoe vs TCP Reno 看上面的总结。
疑问
- RTT包含?发送 + ack确认,RTT = 2 * (Total Time), Total Time = 发送delay + 传输delay + 排队delay + 处理delay
- 接受方的ack 确认的是已经收到的packet的编号? 不对,表示期待的下一个编号
udp
- 常见使用UDP的应用层协议有: Skype等实时语音视频通话,NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
- UDP的头部
- Length: 2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。
- 特点
网络层
IP 报文的格式(IP datagram)
- hdr length: 占用4-bit,表示范围0-15, 单位是4B-word? 总共能表达头部长度20-60B
- total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)
分成5类,A,B,C,D,E
给定一个ip地址,判断是哪一类的话?只需要把第一个字节写成二进制,看前几个bit有几个1,2个1是C,3个1是D。
网络号占的字节数,ABC分别是1,2,3。对应的主机号字节数则是3,2,1.
IP地址划分:子网划分,拿B类举例,B类地址,主机号是2B =16位
子网编号 子网个数 子网掩码 1 2 128 11 4 192 111 8 224 1111 16 240 1111 1 32 248 1111 11 64 252 1111 111 128 254 1111 1111 256 255 有了上面的表格,给定一个ip和子网掩码就能得到: 200.45.34.56/20. (这是C类地址,第3个字节的4位作为子网号)
特殊的IP地址
划分子网
常见的网络层协议:DHCP,IP,NAT
当传输层的fragment传递到IP层时,如果数据比较大,那么IP层会给它分段。 MTU- max transmission unit
- 因为不同的网络线路能传递的最大的网络报文长度不一样
- IP头部有3个flg标志位指示是否分段: bit 0 保留,bit 1: DF (don’t fragment), bit 2: MF (more fragments)
- 划分之后,会在目的机器上,重新组装成一个大的IP报文
数据链路层
基本数据单位是桢。
物理层
传输光电信号的。数据单位是bit。
实践
- 使用wireshark观察各种协议的packet
- 如果要实时抓取网卡数据的话,需要sudo权限启动Wireshart:
sudo wireshark
相关计算
- RTT计算:
- 注意RTT表示一个往返(发送 + ack确认报文)
- IP地址划分:
- 给定一个address 和 mask 能计算出来三个信息,该网段的地址范围,以及总共多少个地址
- 举例:167.199.170.82/27
- 使用ubuntu自带的计算器,Programming mode,很方便地根据二进制计算10进制的值,然后根据10进制算出2进制。
- 举例:167.199.170.82/27
- 给定一个address 和 mask 能计算出来三个信息,该网段的地址范围,以及总共多少个地址
非常好的网络资源
- IP Fragmentation in Detail - Packet Pushers
- IP Time to Live (TTL) and Hop Limit Basics - Packet Pushers
- 802.11 协议介绍 | Jiansoft
- 802.11 协议是位于最下两层(数据链路层 + 物理层)
- IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。
- IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。
- Active_vs_Passive_FTP