OSI七层网络模型图
详述三次握手过程 为什么二次握手不行?
我们可以看到首先主机A发送一个SYN报文打算建立连接,
SYN=1 ACK=0 seq=x
然后主机B收到请求报文后,返回确认报文
SYN=1 ACK=1 seq=y ack=x+1
SYN=1代表这条不是普通报文,是一个请求或者响应报文
ACK=0 请求 ACK=1响应
然后主机A对报文进行确认
SYN=0 ACK=1 seq=x+1 ack=y+1
之前的主机A发送的SYN报文消耗一个序号 所以这里的seq=x+1
二次握手不行的原因
为了防止已经失效的报文突然又传送到主机B
这里假设一种情况,主机A发送了一个SYN报文,然后这个报文因为网络阻塞等原因,延误到报文超时失效才达到主机B。主机B误认为是A的另一次请求,则同意并返回确认报文。然而主机A因为没有发送请求报文,而不理会这个确认报文。也不向主机B发送数据,主机B一直等待,资源浪费。
如果是三次握手,则刚刚主机B发生的确认报文,主机A不会发送确认。主机B没接受确认也不会建立这次连接了。
详述四次挥手过程
我们首先看到主机A发送一个FIN报文请求释放连接
FIN=1 seq=u
FIN报文消耗一个序号,这里seq=u是上一次传输数据的最后一个字节的序号+1
主机B收到FIN报文,返回确认报文
ACK=1 ack=u+1 seq=v
v也是主机B已经传送过数据最后一个字节序号+1
主机B通知上层应用,A到B的连接释放,此时处于半连接状态
B可能还要向A传送数据...
B不再向A发送数据,上层应用通知TCP释放连接
B发起一个FIN报文
FIN=1 ACK=1 ack=u+1 seq=v
对上一次的一端释放的确认,同时发送这一方的释放,上一次发送的ACK报文不消耗序号 seq=v
A收到报文后,发送确认报文
ACK=1 ack=v+1 seq=u+1
FIN报文消耗一个序号 seq=u+1
等待超时2MSL
在等待过程中若A没有再收到B的FIN报文,则代表A的确认报文没有丢失,释放连接。若有,A再重传确认报文到B等待超时。
一个TCP报文段的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度超过TCP报文字段中的序号字段可能编出的最大序号,问还能否用TCP来传送?
65535-20-20=65495
因为IP数据报最大长度65535 TCP首部20字节 IP首部20字节,剩下的就是数据部分。
数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号,通过循环使用序号,仍能用TCP来传送。
主机A和B使用TCP通信,在B发送的报文段中,有这样连续的两个:ack=120 和ack=100 这可能吗?(前一个报文的确认号还大于后一个的)?试说明理由
完全可能。设想A连续发送两个报文段:(SEQ=92,DATA共8个字节)和(SEQ=100,DATA共20字节),均正确到达B。B连续发送两个确认:(ACK=100)和(ACK=120)。但前者在传送时丢失了。于是A超时重传(SEQ=92,DATA共8字节),而B再次收到该报文段后,发送(ACK=100)。这样,在这个报文段之前发送的就是(ACK=120)。
在浏览器中输入www.baidu.com后执行的全部过程
现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作:
1)客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2)在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3)达到IP层之后,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,通过查找路由表决定通过那个路径到达服务器。
4)客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换IP数据包,然后再根据路由表的路径再次交换,直到交换到目的地址的路由器之后,最终到达目的网络上的一个主机。这时双方就传输成功了。客户端发送IP数据包到达服务器的地址。
IP地址
网络地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。比如:128.0.0.0
广播地址
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。
组播地址
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;
B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;
C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255