1. 传输层有哪些协议及对应职能?
1、传输控制协议TCP
TCP协议:面向连bai接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。
像手机打电话一样,还要保证接收方接通电话才能传输数据。
2、用户数据报协议UDP
UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。
UDP就像发短信,只管发送出去,不关心对方是否收到。
总之: TCP 提供的是一种可靠的、面向连接的数据传输服务;而UDP协议提供的是不可靠的、无连接的数据传输服务。
**
2. 传输层如何区分不同应用程序的数据流?
**
对于传输层而言,他只需知道目标主机上哪个服务程序响应这个程序,并不需要这个服务程序是用来干什么的。因此我们只用抽象的表示这些应用程序和服务程序即可, 通常我们用用端口号来标识程序。
传输层的TCP和UDP可以接受来自多个应用程序的数据流,用端口号识别他们,并把它们发送给internet层处理
同时TCP和UDP接受来自internet层的数据流,用端口号区分它们,并交给不同的应用程序。
因此 在同一ip地址上不同端口号是不同的连接, ip地址和端口号是用来唯一确定网络数据的目的地。
**
3.TCP/IP 与蓝牙、WIFI、GPRS、光通信分别什么关系?
**
没有关系,TCP/IP是OSI的网络层和传输层
蓝牙、WIFI、GPRS、光通信是不同的通信方式。
**
4. 什么是 UDP 协议?
**
UDP是一个简单的面向数据报的传输层协议,进程的每个输出操作都刚好产生一个UDP数据报,并组成一份待发送的IP数据包
但是UDP不提供可靠性,它把应用程序传输给ip层的数据发送出去,但并不保证它们一定能达到目的地。
UDP数据包结构如下图所示
源端口(16) | 目标端口(16) |
---|---|
报文长度(16) | 校验和(16) |
数据(可变) | 数据(可变) |
UDP首部有8个字节,由4个字段组成,每个字段都是两个字节。
1.源端口号:需要对方回信时选用,不需要时全部置0.
2.目的端口:目的端口号,在终点交付报文的时候需要用到。
3.长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。
该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0.
当传输层从IP层收到UDP数据报时,就根据首部中的目的地端口,根据端口号交给对应应用程序。
如果接收方udp发现目的地端口号不对应时(不存在对应端口号的应用进程0,),就把此报文丢弃
最少需要目的端口和长度
5. 为什么有了 UDP,还需要 TCP?
UDP为应用程序提供的是一种无连接、不可靠的分组交付。当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、 乱序的现象。UDP并不能保证发送的消息准确可靠。使用UDP传输数据时,每个数据段都是一个独立的信息,包括完整的源地址和目的地,在网络上以任何可能的路径到达目的地。因此,能否到达目的地以及到达目的地的时间和内容的完整性都不能保证
**
6. 什么是 TCP 协议(画出包结构)?
**
传输控制协议TCP是一个面向链接的、可靠的通信协议。
- 在开始传输前,需要进行三次握手建立链接
- 可靠性:在传输过程中,通信双方的协议模块继续进行通信
- 通信结束后,通信双方都会使用改进的三次握手来关闭链接
源端口号(16位):它标识源主机的一个应用进程
目的端口号:它标识目的主机的一个应用进程。
顺序号(32位):用来标识TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段的第一个数据字节的顺序号
应答号(32位):包含发送确认的一端所期望收到的下一个顺序号。
头长度(4位):给出报头中32bit的数目,它实际上指明数据从哪里开始。
保留位(6位):保留给将来使用,目前必须置为0.
编码位(6位):在TCP报头中有6个标志比特,它们中的多个可同时被设置为1.依次为:
URG:为1表示紧急指针有效,为0则忽略。
ACK:为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段。
PSH:为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
RST:用于复位由于主机崩溃或其他原因而出现的错误的连接。一般情况下如果收到一个RST为1的报文,那么一定发生了某些问题。
SYN:同步序号,为1表示连接请求,用于建立连接和使顺序号同步。
FIN:用于释放连接,为1表示发送方已经没有数据发送,即关闭本方数据流。
窗口大小:(16位)数据字节数,表示从确认号开始,本报文的源方可以接收的字节数。
校验和(16位):此校验和是对整个的TCP报文段(包括TCP头部和TCP数据)以16位字计算所得。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。
紧急指针(16位):只有当URG标志置1时紧急指针才有效
选项:最长见的是可选字段是最长报文大小,又称为MSS。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。
数据:不解释。
7. 怎么理解协议和程序?
如同我们自定义的应用层协议一样:协议只是给出了一组规范,规定我们应该怎么样(按什么规则)保存数据。
程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。
8. 从协议的角度看 telnet/ping/http/tracert 有何异同点?
ping命令工作在OSI参考模型的第三层-网络层。
利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。这个测试命令可以帮助网络管理者测试到达目的主机的网络是否连接。
Telnet是位于OSI模型的第7层—应用层上的一种协议,是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证,是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。
tracert是路由跟踪程序,用于确定 IP 数据报访问目标所经过的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 在工作环境中有多条链路出口时,可以通过该命令查询数据是经过的哪一条链路出口。tracert一般用来检测故障的位置,我们可以使用用tracert IP命令确定数据包在网络上的停止位置,来判断在哪个环节上出了问题,虽然还是没有确定是什么问题,但它已经告诉了我们问题所在的地方,方便检测网络中存在的问题。
9. TCP 链接是如何建立的?”建立 TCP 链路开销很大”指的是?
1) 请求端(通常称为客户)发送一个SYN报文段(SYN为1)指明客户打算连接的服务器的端口及初始顺序号(随机x)
2) 服务器发回包含服务器的初始顺序号(y)的SYN报文段(SYN为1)作为应答。同时将确认号设置为客户的ISN(顺序号x + 1)加1以对客户的SYN报文段进行确认(ACK也为1)
3) 客户必须将确认号设置为服务器的ISN加一(y + 1)以对服务器的SYN报文段进行确认(ACK为1),该报文通知目的主机双方已完成连接建立。
建立TCP链接,必须进行三次IP数据包的成功传输。
10.从协议层说明: 域名劫持/ ARP 欺骗/DDOS/SQL 注入等攻击原理
DDos 攻击
客户端向服务端发送请求链接数据包,服务端向客户端发送确认数据包,客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认
什么是SQL注入攻击
攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。
用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现
select * from user where name = ‘lianggzone’ and password = ‘’ or ‘1’=‘1’
不管用户名和密码是什么内容,使查询出来的用户列表不为空。
11. 三次握手的目的是什么?
TCP是面向链接的,在面向链接的环境中,开始传输数据之前,在两个终端之间必须先建立一个链接。建立链接的过程可以确保通信双方在发送应用程序数据包之前,都已经准备好了传送和接收数据。并且使通信双方统一了初始化序列号。
12. TCP 如何提供可靠性?
在传输过程中,通信双方的协议模块继续进行通信,从而确保了传输的可靠性。
针对乱序:在通过三次握手进行链接时,序列号被初始化。在传输过程中,TCP继续使用这个序列号来标记发送的每一个数据段,没传送一个数据段,序列号加一。接收方依据序列号重装收到的数据段。
针对丢包:在传输过程中,接收方收到一个数据段后,会用ACK应答码向发送端回复一个IP包进行应答,确认号ACK用来告诉发送端哪些数据包已经成功接收,发送方对未被应答的报文段提供重传。
针对重复:接收端收到数据段后,查看序列号,如果已经成功接收改数据包,则丢弃后面这个数据段。
针对延时:延时造成的第一个问题,就是数据包达到接收端时乱序。
当延时严重时,接收端一直未收到数据段,则不会回复ACK,发送端认为丢包,重发。
13. 什么是预期确认?什么是肯定确认与重新传输?哪些情况会重传?
1.确认号ACK会告诉发送端哪些数据段已经成功接收,并且确认号会向发送端指出接收端希望收到的下一个序列号。即,确实号ACK为上个数据序列号+1,这种机制称为预期确认。
2.为了提高效率,我们在发送端,将数据段保存在缓冲区中,直道发送端收到来自接收端的确认号。这种机制被称为“肯定确认与重新传输”。
3.当发送端在给定时间间隔内收不到那个数据段的应答时,发送端就会重传那个数据段。
情况1:网络延时/环路,数据段丢失
情况2:网络延时,数据段推迟到达
情况3:数据段成功到达,应答因为1.2不能达到
- TCP 中,序列号和应答号有哪些作用?
依靠序列号重组数据段
依靠数据包消除网络中的重复包
依靠序列号和应答号进行差错重传,提高了TCP的可靠性
15. TCP 链接中,网络失败,是怎么判断的?
**
16. 为什么需要窗口技术?
前面我们已经说了,TCP的可靠性,是通过预期确认来实现的。即发送方发送一个数据段后,需要得到对方的确认后,才会发送下一个数据段。
因 此,假设一个数据段大小为64KB(IP包最大值),一次发送和确认需要的时间为500MS,则,1S内,只能传送128KB的数据,如果带宽为1M,显 然很浪费带宽。为了充分利用带宽,我们使用窗口技术。滑动窗口允许发送方在收到接收方的确认之前发送多个数据段。(窗口大小决定了在收到确认前可以发送的 数据段数量)
**
17. 如何实现流量控制?
窗口数决定了当前传输的最大流量。当我们在传输过程中,通信双方可以根据网络条件动态协商窗口大小,调整窗口大小时,即可实现流量控制。(在TCP的每个确认中,除了ACK外,还包括一个窗口通知)
**
18. UDP 的开销很小,具体是指什么?
1.因为UDP是无连接的。在传输数据之前,不需要进行复杂的三次握手来建立连接。
2.在传输数据时,没有协议间通信流量(确认信号),也不需要浪费不必要的处理时间(接收确认信号再发一下)。
3;传输结束后,也不用再用改进的三次握手来端口连接。
19. UDP 数据包、TCP 数据包大小如何确认?
无论TCP还是UDP数据包,都需要交给Internet层封装为IP包,而一个IP包,包头中的长度位为16位,所以IP包最大为2的16方,即65535(64KB还需要减去各种包头长度)。
TCP因为面向流,且可以凭借序列号对大文件进行分段和重组,因此,TCP可以用来传输较大的文件。而UDP,如果要传输大于64KB的数据,则需要自己在应用层进行差错控制。
为了提高传输效率和减少网络通信量(协议间的通信),TCP也会一次传输足够多的数据。
因为MTU的存在,TCP包和UDP包不是越大越好。(在路由中分包,在接收端重组,加大路由与接收端负担,增大丢包概率。分组丢失,整个数据包重传。)
**
20. UDP 适合哪些环境?TCP 适合哪些环境?
适合UDP的环境:
1.在高效可靠的网络环境中(不需要考虑网络不好导致的丢包、乱序、延时、重复等问题),因为UDP是无连接的服务,不用消耗不必要的网络资源(TCP中的协议间通信)和处理时间(预期确认需要的时间),从而效率要高的多。
2.在轻权通信中, 当需要传输的数据量很小(可以装在一个IP数据包内)时。如果我们使用TCP协议,那么,先建立连接,一共需要发送3个IP数据包,然后数据传输,1个 IP数据包,产生一个确认信号的IP包,然后关闭连接,需要传输5个IP数据包。使用TCP协议IP包的利用率为1/10。而使用UDP,只需要发送一个 IP数据包。哪怕丢包(服务不成功),也可重新申请服务(重传)。
注:而且无论UDP还是TCP,传输的都是IP数据包。当网络环境不好导致丢包时,无论TCP还是UDP都会丢包,这是没有区别的。(如果考虑发送丢包,那么TCP效率更低),只是使用TCP,当连接建立成功后,TCP程序会进行可靠性控制。
UDP很适合这种客户机向服务器传送简单服务请求的环境。此类应用层协议包括TFTP , SNMP , DNS ,DHCP等。
3.在对实时性要求很强的通信中:在诸如实时视频直播等对实时性要求很高的环境中,从而允许一定量的丢包的情况下(直播比赛,前面丢失的包,重传出来已经意义不大了),UDP更适合。(可以根据具体需要通过应用层协议提供可靠性,不用像TCP那么严格。)
适合TCP协议的环境:
当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象。这些都会导致我们的通信不正常的时候。如果让应用程序来担负差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用独立的通信协议来保证通信的可靠性是非常必要的
**