**关于网络体系——udp与tcp**

      在其前面说到了寻址与转发的问题,两个主机之间通信,实质上是两个进程之间进行通信,那么如何去区分不同的进程呢? 这里我们引入了一个新的东西,端口号.端口号区分了不同的进程,常见的如 80 http  69 tftp 23 telnet等等.传输层的协议有两个,udp和tcp,其中udp比较简单,仅仅在网络层的基础之上添加了端口号,udp头部有一个可选的校验和还有udp长度.udp的特点是无连接,花费较小,不可靠.

校验和是覆盖了整个udp头部和数据部分的,注意一点的事在计算校验和的时候会加上一个伪首部,伪首部包含了ip的一些字段,这个伪首部仅仅用来计算校验和,不发送.

进程的每一次输出操作都会产生一个udp数据报,当udp数据报大于路径MTU的时候,就会进行分片.

;另一个比较复杂的协议是tcp,tcp面向连接,提供了可靠性.tcp有超时重传机制,确认机制以及流量控制等机制来确保可靠性.

tcp除了拥有端口号之外,还拥有序号和确认序号,系统会分配一个随机的初始序号,没发送一个字节,这个序号就会+1,可以看做是对报文段中的字节进行计数,确认序号是用来发送给发送方的,表示已经接收到了那些序号,期待下一次收到的序号是多少开始的.

其中SYN标记位作为同步序号,在建立连接的时候使用,ACK标记位表示该报文是一个确认报文,FIN是一个终止连接的标记,PSH标志位表示要尽快把报文上交上去并清空缓存区域.

窗口大小可以理解为缓冲区的大小,当窗口为0的时候是无法去接受数据的.tcp的校验是必须的,计算方式与ip首部的计算方式一致,简单的求和.常见的选项有MSS,最大报文段,用这个数据来避免进行分片,确保可靠性.通常默认为536.

 

tcp的三次握手

 

首先由客户端发起请求,发送一个TCP报文,SYN置1,服务器收到之后回复一个报文,ACK置1,之后客户端再次回应ACK,连接建立成功.

 

  四次挥手拆除连接,因为tcp是全双工的,因此拆除连接需要两个方向都进行拆除.

 

关于确认:

经受时延的确认,tcp收到报文之后,并不立即发送确认,而是会延迟一下,以便将确认和沿着该方向发送的数据一起发送,也叫数据捎带ACK

negle算法:

为了减少网络中的微小分组,tcp会先发送一个微小分组出去,然后收集其他的微小分组,收到确认的时候,再将这些分组一起发送出去.这个算法主要是为了改善网络环境.有时候在实时性要求较高的环境下需要关闭这个算法,比如鼠标的操作.

关于重传:

tcp有两种重传的机制,一个是超时重传,第二个是收到了重复的确认报文.

超时重传:tcp在发送完一个报文之后,会启动一个定时器,如果在定时器超时之前,没有收到确认报文,那么将进行重传.

快速重传:假设tcp一次发送了6个报文段,报文段1.2.3.5..6到了,报文段4丢了,这时候,对端就会一直发送对报文段3的确认报文,如果连续收到了三个这样的报文,那么久不用等到超时,直接就重传报文段4.收到了报文段4之后,才会确认报文段6. 注意 这个确认只会确认连续收到的报文段.

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值