携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
1.4.5.3 IPV6数据报格式 名称 作用 位数 版本 Version 知名协议版本,此处因为是ipv6所以总是6 4位 优先级 Traffic Class 又来区分数据报的类型和优先级 8位 流标签 Flow Label 和ipv4标识某个数据报分片不同,这是对于一整个数据报流的标记 19位 有效载荷长度 Payload Length 指的是扩展首部+数据部分的大小,和ipv4的总长度和首部长度都不同,ipv6的首部长度是固定的40字节 16位 下一个首部 Next Header 基本首部的下一个首部指的是有效载荷里标记的的扩展首部,有效载荷里的扩展首部再指向有效载荷里标记的的扩展首部,直至最后指向数据 8位 跳数限制 Hop Limit 基本相当于ipv4当中的TTL,每到一个路由器-1.减到0时丢弃 7位 源地址 Source Address 发送方ipv6地址 128位 目标地址 Destination Address 接收方ipv6地址 128位 1.5.4.4 UDP校验方式 总结一下步骤: 在发送端的时候: 1.就是将每一行(4字节)拆成两部分,左右平均2字节大小,将这两字节数据写成二进制,那么2字节一共就需要2*8=16位。此时检验和没有计算,默认填充0,同时如果数据字段不整齐,则用0补齐,这样就可以写出几十行二进制数,如图中方所示 2.计算着几十行二进制数按二进制反码运算求和,二进制反码运算可以参考 二进制反码求和运算 得到的最后简介再反码,之后将反码之后的放入原来的检验和字段
在接收端的时候: 与发送端的时候不同的是,此时检验和字段不是0了 按照发送端的步骤再将所有数据写成二进制进行二进制反码运算求和 如果最后得到结果全1就是没问题,否则丢弃 1.5.5.2 TCP报文段的首部 注释: 见上图,可以看到TCP是将数据随机分割后加上TCP头传输的,所以 序号就是为了标记这些随机分割之后的数据,这里把第一个字节的编号当成序号 确认号就是收到之后做一下标记,代表这之前的都收到了,希望收到的下一个编号的数据就是确认号打头的那个数据 偏移量就是为了标记一下距离TCP开始多少字节是数据,这里的单位是4B,这个偏移量就是TCP首部长度
1.5.5.4 TCP三次握手(建立连接) 名称 作用 SYN 同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1 FIN 用于释放连接,为1时表示发送方没有发送了 ACK 为1表示确认号有效,为0表示报文不含确认信息,忽略确认号字段,上面的确认号是否有效就是通过该标识控制的 ack 是期望收到对方下一个报文段的第一个数据字节的序号 seq TCP连接中传送的字节流中的每个字节都按顺序编号 注释: 第一段的意思是: SYN同步序号=1:(A)要建立连接了! seq序号=x(随机):因为还没有数据,所以写什么都无所谓
第二段的意思是: SYN同步序号=1:我(B)同意你(A)建立连接! ACK确认序号=1:连接建立了,之后的ACK必须都置为1 seq序号=y(随机):因为还没有数据,所以写什么都无所谓 ack确认号=x+1:之前发送方(A)说发送的是第x位数据(虽然发送方是瞎说的),所以我(B)要的是x+1位数据
第三段的意思是: SYN=0:SYN只有在建立连接时才为1,其他时候均设为0 ACK=1:连接建立了,之后的ACK必须都置为1 seq=x+1:我(A)发送的报文段的第一个字节就是x+1 ack=y+1:之前接收方(B)说发送的是第y位数据(虽然接收方是瞎说的),所以我(A)要的是y+1位数据
注意一下,TCP是双向的,所以不存在绝对不变的发送方接收方,这里的两台主机都同时是发送方和接收方