第3周作业

9.  总结TCP包头结构,TCP三次握手,四次挥手?

     答:

TCP包头部结构:

TCP协议的首部前20个字节是一些固定的字段,这前20个字节之后有一段可选字段也称为选项,长度可变;

     (1).前4个字节是源端口字段和目标端口字段,每个字段2个字节;

     (2).序号==>seq占用4个字节;因为序号是4个字节,所以它能编号的范围是0到2^32-1;当序号增加到2^32-1之后,下一个序号将又重新绕回到0开始编号。编号的方式是每个分包的起始字节号,例如第一次要发送的数据分包编号是seq=1,如果这次发送的数据长度是len=10个字节,则下个分包的编号是seq=11,依次类推;

     (3).确认号(ack)占用4个字节,它是等待发送方发送的下个数据包的起始字节,接收方收到分包之后,将会给发送方发送一个确认ack包,用于告知发送方下一个要发送的分包将从此序号开始,例如接收方接收到了前100个字节,此时如果要发送确认包,则ack=101;另一方面,当发送方接收到确认包的ack=101,这已经表明接收方已经明确接收到了前100个字节的数据;

     (4).数据偏移占4个bit位,它用来确认TCP数据段距离首部多长,换句话说,可以根据该字段知道TCP的数据部分的起始位置;之所以有这个字段,主要是因为TCP首部前20个字节之后还有可选字段,这个可选字段的长度是不确定的;

     (5).保留字段,目前还未定义功能的字段,占用6个bit位;

     (6).URG位,占用1个bit位,其值为0或1,当为1时表示这是紧急数据,需要尽快发送,而不是按照原来的编号顺序传输;

     (7).ACK位,占用1个bit位,其值为0或1,当为1时,表明前面的ack确认号字段才是有效的,当为0时,则表示确认号ack无效;TCP要求,连接建立完成后,ACK字段总是设置为1;

     (8).RST位,占用1个bit位,其值为0或1,当为1时,表明需要重新建立TCP连接,所以这会导致先释放连接;当RST=1时,这可能是因为连接出现了差错,或者其他一些原因导致的;

     (9).SYN位,占用1个bit位,其值为0或1,用于同步编号;当SYN=1, 而ACK=0时,说明连接尚未建立,所以这是一个TCP的连接请求,如果对方接受请求连接,则回复时将设置SYN=1且ACK=1。SYN会在连接建立后设置为0,所以SYN=1表示这是TCP连接建立前的请求或响应包,此时应结合ACK即可判断是还是响应;

     (10).FIN(finish),占用一个bit位,其值为0或1,当FIN为1时,则表明请求释放TCP连接;

     (11).窗口,占用2个字节,所以其范围是0到2^16-1,窗口用于告知对方,从本TCP报文中的确认号开始,允许发送方发送多少数据,这个字段的意义是为了保证接收速度变慢时,让发送方的速度也缓慢下来,否则接收方的缓存存放不下,接收方可能随时会动态调整窗口值,从而让发送方也能动态按需发送一定量的数据;

      (12).校验和,占用2个字节,该字段会对TCP首部和TCP数据部分都做校验;

      (13).紧急指针,占用2个字节,紧急指针只有在URG设置为1时才有意义,该字段指出紧急数据的字节数;

       (14).可选字段,这部分是固定20字节之后的,长度可变;

  TCP三次握手:

首先服务端B的服务进程已经监听在某个端口上,监听之后就可以一直等待客户端请求建立TCP连接;

    (1).当客户端A想要和服务端B建立连接时,首先会发送一个连接请求报文给服务端B;在这个请求报文中,TCP首部中的SYN位设置为1,ACK位设置为0,假设此时的序号是x(序号不一定是1),即SYN=1,ACK=0,seq=x,这个包也常称为SYN包,当客户端发送SYN包后,它将进入SYN_SENT状态;

    (2).当B收到该报文后,发现其中的SYN=1, ACK=0,便知道这是一个TCP连接的请求包。如果B确认与A建立TCP连接,那么B需要回复A;回复时,SYN=1, ACK=1, ack=x+1, seq=y; 注意区分这里的ACK和ack,ACK表示的是占用一个bit位的ACK的设置位,而ack是确认号,这个包通常被称为ACK包,当服务端B发送完ACK包之后,它将进入SYN_RECV状态;

    (3).当A收到B的回复报文后,发现里面的SYN=1, ACK=1, 于是也会向B回复一个ACK包,回复时,SYN=0, ACK=1, seq=x+1, ack=y+1; 这里的SYN=0,ACK=1表示这不是建立连接的请求包,而是回复包,A发送完之后,就进入ESTABLISHED状态,表示连接在A这端已经建立完成了;

    (4).服务端B最终收到A的ACK包之后,也将进入ESTABLISHED状态;到此,TCP连接就建立完成。

TCP四次挥手:

首先客户端与服务端在开始释放TCP连接之前,都已经处于ESTABLISHED的状态,假设客户端A开始前期释放连接:

(1).客户端A首先发送一个TCP首部中FIN位为1的包给服务端B,假设此时序号是u,seq=u;FIN=1意味着这是一个请求关闭TCP连接的数据包,这种包也称为FIN包,当发送FIN包之后,A将从ESTABLISHED状态转变为FIN-WAIT-1状态;

(2).服务端B收到FIN包之后,发现其中的FIN=1,知道A端请求关闭,于是发一个回复包给A,回复时,设置ACK=1, ack=u+1, 同时还设置序号seq=v, 发送完这个回复包之后,服务端进入CLOSE-WAIT状态,到了这个阶段,A(主动请求关闭方)到B(被动关闭方)方向的连接就已经释放了,A不能再发送数据给B了,但是B到A的方向的连接还没有关闭,它可以继续发送数据给A,A也会接受,因为在这个阶段只有一个方向的连接被释放,所以close-wait状态也被称为半关闭状态;

(3).当A收到B的ACK包之后,它将进入FIN-WAIT-2,等待B发起从B到A方向的连接关闭请求;

(4).当B确认已经没有数据发送给A后,B开始主动关闭从B到A方向的TCP连接,这时会发送一个FIN包,同时ACK设置为1, ack依然保持不变,是u+1;而seq则为一个新值w, 因为进入CLOSE-WAIT之后,B可能还发送了一些数据,B发送完这个FIN+ACK包之后,将进入LAST-ACK(最后确认)状态;

(5).当A收到B的FIN+ACK包之后,需要对B发送的关闭请求做出回复,回复时,ACK=1, seq=u+1不变,ack=w+1, 当发送完这个ACK包之后,A不会立即关闭,而是进入到TIME-WAIT阶段等待一段时间(2倍的MSL时长);

(6).当B收到A的回复ACK包之后,就意味着B到A方向的连接关闭已经确认了,于是B端关闭连接;

(7).当A等待了2MSL的时长以后,将真正关闭连接。

12.   201.222.200.111/18  计算主机数?子网掩码?说明计算方法

        答:201.222.200.111/18的网络位是18位,则其主机数=2^14 - 主机位全为0的情况 - 主机位全为1的情况 = 2^14 - 2 = 2^10*2^4 - 2 = 1024*16 - 2 = 16384-2=16382,因为IPV4地址总共有4个字节组成,每个字节的范围是0~~255,也就是8个bit位,而且201.222.200.111/18其网络位是18位,那么从左向右的前2个字节已经占了16bit位,再向第3个字节取2位,则可以得出其子网掩码为 255.255.(128+64).0 ==>255.255.192.0

13.   当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?

        答:先用A的IP地址和A的子网掩码相与(&)操作,得出结果1为:10.0.0.0;

               再用B的IP地址和A的子网掩码相与(&)操作,得出结果2为:10.0.0.0;

               则比较结果1和结果2的值,结果1和结果2相等,以A的角度看,A和B是处于同一网段。

               接着再以B的IP地址和B的子网掩码相与(&)操作,得出的结果3为:10.0.2.0

               然后再以A的IP地址和B的子网掩码相与(&)操作,得出的结果4为:10.0.1.0

               结果3和结果4的并不相同,所以综上所述:A和B不能通信。

14.   如何将10.0.0.0/8划分成32个子网?求每个子网的掩码和主机数?

        答:2^5 = 32,所以将10.0.0.0/8划分成32个子网,应在原有的基础上,再向主机位借5位;

               即每个子网的掩码为:  255.11111 000.0.0  ==>255.(255 - 7).0.0 ==>255.248.0.0

               每个子网的主机数:2^(32 - 13) - 2 = 2^19 - 2 = 2^14*2^5 - 2=16384*32 - 2=524286

15.通过网络配置命令,让主机可以上网:

通过nmcli connection show查看当前主机上的旧的网卡信息;

mcli connection delete  旧网卡的UUID

新增加一个新的网卡,其con-name为eth0, 其对应的网卡名为eth0

nmcli connection add type ethernet con-name eth0 ifname eth0

 给新添加的网卡配置IP地址,子网掩码,DNS,网关

nmcli connection modify eth0 \

ipv4.method manual \

ipv4.addresses   192.168.60.11/24 \

ipv4.gateway 192.168.60.254 \

ipv4.dns 8.8.8.8

autoyes            

16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0的配置格式:

答:该文件的主要配置内容如下:

DEVICE:此配置文件应用到的设备,也是显示名称,必须与/sys/class/net/目录下的某个网卡名相同;

HWADDR: 对应设备的MAC地址;

BOOTPROTO: 激活此设备时使用的地址配置协议,常用的有dhcp, static, none, bootp;

NM_CONTROLLED: NM是Network-Manager的简写,表示此网卡是否接受NM的管理, Centos6建议设置为 no;

ONBOOT:   在系统启动时是否激活此设备,可选值为yes或者no,  如果设置为no,则需要手动启动;TYPE:设定接口的类型,常见的类型有==》ethernet 和bridge;

UUID:  设备唯一的标识;

IPADDR:  设备的IP地址;

NETMASK: 子网掩码;

GATEWAY:  设定的默认网关;

DNS1:  设定的第一个DNS服务器指向;

DNS2:设定的第二个DNS服务器指向;

PEERDNS:设置为yes时,此文件设置的DNS将覆盖/etc/resolv.conf,  若BOOTPROTO的值是"dhcp"时,则此项默认为 yes,所以dhcp的dns也会覆盖/etc/resolv.conf;

PEERROUTES: 设置为yes时,DHCP设置的路由将覆盖route-ethX文件中的永久路由信息;

DEFROUTE: 设置为yes时,DHCP将设置默认路由;

18.通过ifconfig命令取到ip地址:

答:ifconfig eth0 | sed -rn '2s#(.*inet )([0-9].*)(netmask.*)#\2#p'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值