预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共25页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

TCPIP传输层TCP/IP传输层TCP:传输控制协议,是TCP/IP参考模型的传输层协议。那么关于TCP/IP传输层,你懂多少?下面跟yjbys小编一起来学习吧!一、传输层的主要功能是什么?分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务二、传输层如何区分不同应用程序的数据流?因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应这个程序,而不需要知道这个服务程序是干什么的。因此,我们只需要能够抽象的表示出来这些应用程序和服务程序即可。我们使用端口号来抽象标识每个网络程序。传输层的TCP和UDP可以接收来自多个应用程序的数据流,用端口号标识他们,然后把他们送给Internet层处理;同时TCP和UDP接收来自Internet层的数据包,用端口号区分他们,然后交给不同的应用程序。因此:在同一IP地址(同一个目标主机)上不同的端口号是两个不同的链接。IP地址和端口号用来唯一的确定网络上数据的目的地。三、传输层有哪些协议?传输层的两大协议:TCP(传输控制协议)UDP(用户数据包协议)TCP是一个可靠的面向链接的协议,UDP是不可靠的或者说无连接的协议。可以用打电话和发短信来说明这种关系:UDP就好似发短信,只管发出去,至于对方是不是空号(网络不可到达)能不能收到(丢包)等并不关心。TCP好像打电话,双方要通话,首先,要确定对方不是开机(网络可以到达),然后要确定是不是没有信号(),然后还需要对方接听(通信链接)。四、什么是UDP协议?UDP数据包结构如下图所示源端口(16)目标端口(16)报文长度(16)校验和(16)数据(可变)UDP为应用程序提供的是一种不可靠的、无连接的分组交付,因此,UDP报文可能会出现丢失、乱序、重复、延时等问题。因为它不提供可靠性,它的开销很小。五、为什么有了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程序,逻辑上的认为建立了这样的链接。九、链接是如何建立的(逻辑上)?假设:当我们在主机A上启动一个程序,通过TCP去链接主机B上的9091端口。整个过程是怎么样的呢?逻辑上我们可以这么理解建立链接的过程:1.SYN:seq=X;1.1A的TCP程序,为这个链接分配一个端口(设为9090)。1.2同时逻辑上的将TCP连接的状态设置为:正在连接。(通过在链接状态表中添加一条记录,记录中状态为:正在连接)猜想:TCP程序中,应该有张表来保持链接的状态,其中每个状态应该有:本机地址(IP加port)、对方地址、链接状态1.3同时,随机生成一个初始序列号X,生成一个TCP包,将初始化序列号X设置为TCP中的序列号,发送给主机B。2.SYN:seq=YACK:ack=X+1;2.1B上TCP程序收到该数据包,查询9091端口状态,如果可以链接。2.2同样的,在逻辑上的将TCP连接的状态设置为:正在连接2.3同时,随机生成一