子网 subnet
划分子网的原因
1.IP地址空间的利用率有时很低。一个A类地址网络可连接的主机有1000多万,但是经常这些IP地址并没有被用到。比如一个几百人的公司为了未来的发展申请了一个B类地址,会造成很多不必要的浪费。 2.给每一个物理网络分配一个网络好会使路由表变得太大因而是网络性能变坏。 3.两级IP地址不够灵活。新公司在没有申请到新的IP地址之前是无法连接到互联网的。 综上所述,从1985年起在IP地址中增加了一个“子网号字段”,使两级IP地址变为三级。这个就叫做划分子网(subnetting)。
划分子网的基本思路
- 一个拥有许多物理网络的单位,可将所述的物理网络划分为若干个子网。划分子网纯属一个单位内部的事情。你想划分多少个就划分多少个。单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络。
- 划分子网的方法是从网络的主机号借用若干位作为子网号(subnet-id),这样主机号也会减少同样的位数。
IP address ::= {<网络号>,<子网号>,<主机号>}主机号>子网号>网络号>
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但次路由器在收到IP数据报后,再按目的网络号和子网找到目的子网,把IP数据包交付目的主机。
子网掩码
从IP数据包的header无法看出愿主机或目的主机所连接的网络是否进行了子网的划分。这是因为32位的IP地址本身以及数据包的收不都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码(subnet mask)。 不管网络有没有划分子网,只要把子网掩码和IP地址进行AND运算,就能得到网络地址。 划分子网增加了灵活性,但是却会减少能够连接在网络上的主机数量。
Transport Layer
网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
UDP
- UDP是无连接的,即发送数据前不需要建立连接,因此减少了开销和发送数据之前的时延。
- UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
- UDP是面向报文的。发送方的UDP对应用程序交下来的报文,再添加header后就向下交付IP层。应用层交下来多长的报文,UDP就加个header直接发送。UDP一次交付一个完整的报文。
- UDP 没有拥塞控制(congestion control)
- UDP支持一对一,一对多,多对一和多对多的交互通信。
- UDP的header很短,所以开销小。UDP的header只有8 bytes,TCP的话至少有20bytes。
UDP header
UDP的header有8bytes,共四段,每段有2bytes:
- 源端口。在需要对方回信是选用。不需要时可用全0。
- 目的端口。 这在终点交付报文时必须使用。
- 长度。 UDP用户数据报(datagram)的长度,其最小值是8(只有header)
- 检验和。 检测UDP用户数据报在传输中是否有错。有错的话就丢弃。
TCP
- TCP是面向连接的运输层协议。这就是说,在使用TCP之前需要建立连接,结束使用需要释放连接。
- 每一条TCP连接只能有两个端点,TCP连接时点对点的。
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
- 面向字节流。TCP中的“流”指的是流入到进程或者从进程流出的字节序列。
socker = (IP addresss: port number) eg: 127.0.0.1:666
TCP可靠传输的实现
有点复杂,具体实现要自行了解。
TCP header
TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。 TCP报文段首部的前20个bytes都是固定的,后面有4n bytes是根据需要而增加的选项。因此TCP header最短为20bytes。
- 源端口和目的端口。 各占2 bytes,分别写入源端口号和目的端口号。
- 序号(seq)。 占4bytes。序号范围是[0, 2^32-1],共2^32个序号。TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号。整个要传送的字节流的其实序号必须在建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号(ack)。占4bytes, 是期望收到对方下一个报文段的第一个数据字节的序号。
if ack = N, it means, all data till seq N-1 have been received.
- 数据偏移 占4bits。他指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上时指出TCP报文段的header length。如果数据偏移是1000,十进制就是8,8 * 4 =32bytes,意思是header有32bytes
- 保留(reserved?) 占六位,保留为今后所用,但目前应set to 0。
- 紧急 URG。 当URG=1时,它告诉系统此报文段中有紧急数据,应快马加鞭,加急送到。发送方会把紧急数据插入到本报文段数据的最前面。需要与紧急指针结合使用。
- 确认 ACK 仅当ACK=1时确认好字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK set to 1。
- 推送 PSH 当两个应用程序进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下可以set PSH = 1.
- 复位 RST 当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后在重新建立运输连接。
- 同步 SYN 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1.
- 终止 FIN 用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接
- 窗口 占2bytes 窗口值是[0,2^16-1]之间的整数。窗口值的事发送本报文段的一方的接收窗口。之所以要有这个限制,是因为接收方的数据缓存空间有限。总之,窗口值作为接收方让发送方设置起发送窗口的依据。
- 检验和 占2bytes
- 紧急指针 占2bytes 紧急指针尽在URG=1时才有意义,他指出本报文段中的紧急数据的字节数。
- 选项 长度可变,最长可达40bytes。
TCP的流量控制
所谓流量控制(flow control),就是让发送方的发送速率不要太快,要让接收方来得及接受。TCP利用滑动窗口实现流量控制。
TCP的拥塞控制
- 慢开始 slow start
- 拥塞避免 congestion avoidance
- 快重传 fast retransmit
- 快回复 fast recovery
TCP连接的建立和释放
For details can refer to this link