一. 复习 - 网络原理

1. 层次划分(TCP / IP)

应用层 -> 传输层 -> 网络层 -> 数据链路层

2. 局域网内,数据链路如何通信:

数据的广播的特性(MAC 地址) / 冲突域

3. 局域网内,应用层应用层之间如何通信
  • 从上往下:不断封装
  • 从下网上:不断解包、不断分用
4. 跨局域网的情况下,应用层应用层如何通信:

网络知识 —— TCP - IP

5. 路由设备:

划分局域网,网关的作用


二. 复习 http 协议

应用层的最主要的一个协议

1. URL 的概念:

资源的唯一标识地址

2. 请求:

客户端发送的就是请求

3. 响应:

服务端发送的就是响应

4. C/S:

Client 是请求资源方,Server 是提供资源方。(相对的)

5. 请求格式:

网络知识 —— TCP - IP
这个图有个错误,空行是属于请求头的内容,详情参照响应格式的响应头
常见的方法:
网络知识 —— TCP - IP
默认方法为 GET
常见的方法是 GET 和 POST:区别:GET 没有请求体,POST 有请求体

6. 相应格式:

网络知识 —— TCP - IP
常见的状态码:三位数

1xx 不常见 不常见
2xx 请求成功 200
3xx 资源需要跳转 301/ 302/307
4xx 客户端错误 403 / 404 / 405
5xx 服务器错误 500/502/504

三. 复习socket编程

代码见我的GitHub
关于udp和tcp的 cs 套接字


四. TCP/IP 协议(传输层 + 网络层 + 数据链路层)

1. 传输层:端到端

端口 + IP

在网络上(不考虑私网):

  • IP 的作用是唯一标识一台主机,主机拥有唯一的一个 IP 地址,主机可以拥有多个 IP 地址(主机里边有多个网卡)
  • Port 的作用是标识主机上的唯一一个进程,一个进程可以拥有多个port,而一个port 只能属于一个进程
  • 一组 IP + port 可以标识网络上的一台唯一的主机 和 该主机上的唯一一个进程
  • 五元组(先不管协议):远端 + 本地
    源 IP + 源端口号 + 目的 IP + 目的端口号 + 协议号
    可以标识网络网络上唯一一个端对端的通信通道
  • 五元组工具演示
    网络知识 —— TCP - IP
    网络知识 —— TCP - IP
  • 常见的端口划分策略
    • 建议 1024 以下的端口留给知名的一些服务用(well know),只是建议,例如:MySQL 的端口是 3306.导致监听 1024 以下的端口时,一般需要管理员。
    • 常见的端口:
      网络知识 —— TCP - IP
      其他:MySQL 服务器,使用 3306 端口;
      DNS 服务器,使用 53 端口。

两个问题

  • 一个进程是否可以绑定多个端口号?
    • 可以
  • 一个端口号是否可以被多个进程绑定?
    • 不行,但是有特例
2.UDP 协议
  • 特性

    • 不可靠的:没有确认机制没有重传机制;如果因为网络故障该段无法发送到对方,UDP 协议层也不会给应用层返回任何错误信息
    • 面向报文:不能灵活的控制读写数据的次数和数量
    • 无连接:知道目标的 IP 地址和 端口号就直接传输,不需要建立连接
  • UDP 首部
    网络知识 —— TCP - IP
    解包用的是 UDP 长度,分用用的是 源端口号
    源端口号,还是
    网络知识 —— TCP - IP
    校验和

验证数据的正确性(数据在传输过程中没有发生错误变化)
若是数据发生错误怎么办?直接丢弃

  • 其他知识
  • UDP 没有发送缓冲区(指的是 UDP 传输层上),即UDP 不保存数据,收到数据,进行加工(套上UDP首部),就直接发送
  • UDP 的发送成功代表数据已经到达了 网络层,但不代表对方收到
  • UDP 有接收缓冲区
  • 应用层 receive 是堵塞的
  • UDP 的socket 能读能写,所以是全双工的
  • 基于UDP 的应用层协议
  • NFS: 网络文件系统
  • TFTP: 简单文件传输协议
  • DHCP: 动态主机配置协议
  • BOOTP: 启动协议(用于无盘设备启动)
  • DNS: 域名解析协议
  • DNS(Domain Name Service)域名解析服务
    即 把 www.baidu.com 变成 172.16.34.44
    网络知识 —— TCP - IP
  • DHCP:动态申请IP
    网络知识 —— TCP - IP
    DHCP / Local DNS / Gateway(网关) ------- 都是家里的路由器
3. TCP 协议:
  • 3.1 TCP首部
    网络知识 —— TCP - IP
  • 目的端口用来分用,首部长度用来解包
    网络知识 —— TCP - IP
    不太重要的字段:

URG:urgent 紧急1 + 配合 16 位的紧急指针 使用
PSH:push,在发送数据时,因为有缓冲区,可以用 psh,建议别缓冲这份数据
校验和:检查数据正确性

3.2TCP 的特点:

  • 可靠性:为了保证可靠性而实现一些机制
  • 有连接
  • 面向流

3.3 确认应答机制:

  • 可靠性的第一种表述:作为一个发送方,希望知道我的数据接受方是否收到。
    网络知识 —— TCP - IP
    32位的 序号(Sequence Number,SN) 就是编号
    32位的确认序号(Acknowledge Sequence Number,ASN)就是确认编号

发送的每个数据都带着 SN
如果数据中的 ACK 被置为1,标识该 TCP 包蛋确认含义(发送数据和确认含义公用的)
ASN 可以计算出收到哪些序号

网络知识 —— TCP - IP

  • 其中,一个 TCP 的通信过程中,只有第一个 Segment 的 ACK 没有置为 1,其他全部含有 ACK 含义.
  • ASN 的细节含义:希望发送端发送的下一个字节序号
    网络知识 —— TCP - IP
  • 可靠性的第二种表述:保证数据是按序收到的
    网络知识 —— TCP - IP
    汽车按照1,2,3的序号按照不能的路线发送,在到达最终结果时的顺序为:2,1,3.
    TCP 利用 SN 和 ASN 可以保证 数据是按序收到的,如上例,2在1号车前边到达时,TCP可以利用SN序号,让接收方在接收了 1号车之后,在接收2号车.
    SN的第二个作用

3.4 超时重传机制
向接收方发送数据,但在一定时间后,并没有收到来自接收方的确认信息

  • 可能是对方没有收到我的数据,接收方之前没有收到,所以可以接收此次的重复传递
  • 对方收到数据,但对方发来的应答,我没有收到,接收方重复接收,但因为有序号,所以可以直接丢弃,也没有问题

网络知识 —— TCP - IP

网络知识 —— TCP - IP

超时重传的含义:

  • 超时:指的就是超过了这个估计时间
  • 重传:把没有收到应答的数据重新发送一次
    一定时间:估计我的话传到对方的时间 + 对方应答传回来的时间

SN的第三个作用:去掉重复包

3.5可靠性的含义:
第 0 层含义:数据不会出现错误。 By 校验和
第 1 层含义:确保发送的数据,对方有收到 By 确认应答(SN/ASN/ACK)
第 2 层含义:确保发送的数据,对方是按序收到 By SN

相关文章: