美文网首页
TCP/IP 协议栈的几个问题

TCP/IP 协议栈的几个问题

作者: 岁寒之冰河 | 来源:发表于2017-02-20 20:00 被阅读0次

一。传输层的主要功能是什么?

分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务

二。传输层有哪些协议?

传输层的两大协议:TCP(传输控制协议)UDP(用户数据包协议)

三。 TCP是一个可靠的面向链接的协议,UDP是不可靠的或者说无连接的协议。

可以用打电话和发短信来说明这种关系:

UDP就好似发短信,只管发出去,至于对方是不是空号(网络不可到达)能不能收到(丢包)等并不关心。

TCP好像打电话,双方要通话,首先,要确定对方不是开机(网络可以到达),然后要确定是不是没有信号(),然后还需要对方接听(通信链接)。

四。为什么有了UDP,还需要TCP?

问题4中已经说到,UDP为应用程序提供的是一种无连接、不可靠的分组交付。当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象。这些都会导致我们的通信不正常。如果让应用程序来担负差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用独立的通信协议来保证通信的可靠性是非常必要的。

五。什么是TCP协议?

传输控制协议TCP是一个面向链接的、可靠的通信协议。

1. 在开始传输前,需要进行三次握手建立链接

2. 可靠性:在传输过程中,通信双方的协议模块继续进行通信

3. 通信结束后,通信双方都会使用改进的三次握手来关闭链接

TCP数据包结构如下图

源端口(16)

目标端口(16)

序号(32)

应答号(32)

头长度(4)

保留(6)

编码位(6)

窗口(16)

校验和(16)

紧急(16)

可选项(如果有,0或32)

数据(可变)

六。怎么理解协议和程序?**

如同我们自定义的应用层协议一样:协议只是给出了一组规范,规定我们应该怎么样(按什么规则)保存数据。

在计算机间传输的永远都是二进制字节码(对于传输层,可以理解为传输的始终是下层的IP数据包),计算机中的程序通过对这些字节码进行逻辑分析、判断,来控制程序完成差错控制等功能。

至于解析这些字节码的程序,则可以有不同的实现,只要我们按照规则来解析,并作出相应的控制,我们大可以自己写个程序是实现相应功能。

知道了这些后,显然,我们也可以使用前面说的Jpcap,来自己实现一个基于Java的TCP或者UDP协议。可以参考Linux下的Tcp源码。

/net/ipv4/udp.c

/net/ipv4/datagram.c

/net/ipv4/tcp_input.c

/net/ipv4//tcp_output.c

/net/ipv4/tcp.c

七。TCP是否真的有链接?

我们都知道,TCP通过完成三次握手来建立链接的,但是这种连接是面向虚电路的,是物理上不存在的,只是双方的TCP程序,逻辑上的认为建立了这样的链接

八。:三次握手的目的是什么?

TCP是面向链接的,在面向链接的环境中,开始传输数据之前,在两个中端之间必须先建立一个链接。建立链接的过程可以确保通信双方在发送应用程序数据包之前,都已经准备好了传送和接收数据。并且使通信双方统一了初始化序列号。

九:TCP如何提供可靠性?

在传输过程中,通信双方的协议模块继续进行通信,从而确保了传输的可靠性。

针对乱序:在通过三次握手进行链接时,序列号被初始化。在传输过程中,TCP继续使用这个序列号来标记发送的每一个数据段,没传送一个数据段,序列号加一。接收方依据序列号重装收到的数据段。

针对丢包:在传输过程中,接收方收到一个数据段后,会用ACK应答码向发送端回复一个IP包进行应答,确认号ACK用来告诉发送端哪些数据包已经成功接收,发送方对未被应答的报文段提供重传。

针对重复:接收端收到数据段后,查看序列号,如果已经成功接收改数据包,则丢弃后面这个数据段。

针对延时:延时造成的第一个问题,就是数据包达到接收端时乱序。

当延时严重时,接收端一直未收到数据段,则不会回复ACK,发送端认为丢包,重发。

十:什么是预期确认?什么是肯定确认与重新传输?哪些情况会重传?

1.确认号ACK会告诉发送端哪些数据段已经成功接收,并且确认号会向发送端指出接收端希望收到的下一个序列号。即,确实号ACK为上个数据序列号+1,这种机制称为预期确认

2.为了提高效率,我们在发送端,将数据段保存在缓冲区中,直道发送端收到来自接收端的确认号。这种机制被称为“肯定确认与重新传输”。

3.当发送端在给定时间间隔内收不到那个数据段的应答时,发送端就会重传那个数据段

情况1:网络延时/环路,数据段丢失

情况2:网络延时,数据段推迟到达

情况3:数据段成功到达,应答因为1.2不能达到。

十一: TCP中,序列号和应答号有哪些作用?

从以上10,11,12中,很明显的可以看到

依靠序列号重组数据段

依靠数据包消除网络中的重复包

依靠序列号和应答号进行差错重传,提高了TCP的可靠性

十二:为什么需要窗口技术?

前面我们已经说了,TCP的可靠性,是通过预期确认来实现的。即发送方发送一个数据段后,需要得到对方的确认后,才会发送下一个数据段。

因此,假设一个数据段大小为64KB(IP包最大值),一次发送和确认需要的时间为500MS,则,1S内,只能传送128KB的数据,如果带宽为1M,显然很浪费带宽。为了充分利用带宽,我们使用窗口技术。滑动窗口允许发送方在收到接收方的确认之前发送多个数据段。(窗口大小决定了在收到确认前可以发送的数据段数量)

相关文章

  • TCP协议三次握手和四次挥手

    TCP协议 TCP/IP协议栈 由上图可知,TCP/IP协议栈包含很多的协议。 二. 什么是TCP TCP是TCP...

  • (二)TCP/IP四层模型

    1、基本介绍 TCP/IP协议,也称TCP/IP协议族或TCP/IP协议栈,其中: TCP:Transmissio...

  • TCP/IP 协议模型

    TCP/IP是Internet的基础,是一组协议的代名词,包括许多协议,组成了TCP/IP协议栈。TCP/IP 有...

  • 计算机网络:TCP

    相关定义 TCP/IP: 不是只有TCP + IP这两种协议,而是协议栈,是因特网的主要协议(有IP TCP UD...

  • 计算机网络(二)| IP协议

    IP概述 IP 协议简述 IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心...

  • 网络编程08_IP路由寻址全过程解析

    TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题,因为在我们使用...

  • 【深入浅出Linux】IP路由器寻址全过程分析

    TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题,因为在我们使用...

  • IP协议总结

      IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地...

  • Http 协议详解

    简介 TCP/IP协议栈 Http 超文本协议 HTTP 超文本传输协议,是一个无状态、TCP/IP的应用层协议,...

  • 用户态协议栈的实现

    协议栈,指的是TCP/IP协议栈。linux系统中,协议栈是内核实现的。 Client发送数据给server,数据...

网友评论

      本文标题:TCP/IP 协议栈的几个问题

      本文链接:https://www.haomeiwen.com/subject/ikwewttx.html