06-传输层,TCP与UDP

0
 
1.关于传输层
  • 传输层提供端到端的连接(会话之间)
  • 网络层提供点到点的连接(节点之间)(也就是根据ip地址找到相应的设备)
 
关于端到端:
    上网时,会开多个应用:qq、网页、邮件等;
    这些应用会使用不同的协议:网页的http、邮件的smtp ...    
    这些应用都会给对应的服务端发数据包,这比较容易理解;
    但是服务端都会给应用响应回发数据包,计算机收到数据后,如何知道将哪些数据交给哪个应用程序来处理?
    每个应用程序都会和一个端口绑定;网络层的ip地址提供了点到点,而应用程序的服务使用端到端;
0
 
2.关于端口
根据端口号可以区分不同的应用协议
传输层端口:Port
0
一个应用程序在启动时会提供服务,也就是其绑定的端口开启;
客户端通过端口可以访问到服务;
当服务停止时,端口也会关闭;导致的结果是客户端无法访问;
 
端口数量:2个字节16位,2的16次方,25536个,0-25535
0
0~1023 属于公认端口/知名端口(给一些重要的协议使用的端口)(例如:Http协议使用80端口传输层使用tcp协议;dns协议使用53\udp)
1024~49151属于注册端口/登记端口(应用注册使用的端口)
49152~65535属于私有端口/动态端口(主机/客户端使用的端口)
 
 
  • 端口是根据需求自行更改的
  • 可以通过更改端口可以让非信任用户访问不到应用
  • 如FTP的端口默认为21,修改端口为9999,让非信任用户访问不到FTP服务器(也就是需要在访问时在ip地址后带上:9999)
0
客户端(source port 49152~65535)(客户端在访问服务时,通常会随机分配一个端口,用来接收服务端回包)
服务器(source port 0~49152)
 
端口对应了一种应用协议,真正提供服务的是服务器
 
1)检查服务端是否开启
首先ping,看是否能通,如果通说明连接正常;例如:ping www.baidu.com
能ping通并不一定代表服务开启,服务开启时绑定的端口会开启;如果服务没开,端口关闭;
 
可以使用telnet来测试端口是否开启:
telnet www.baidu.com
telnet协议绑定的是23号端口,连接失败,说明百度的23号端口没开
 
telnet测其它端口:
telnet www.baidu.com 80
百度的网页使用http协议,绑定80端口;
因为端口打开,有响应;
 
3.传输层协议
 
协议
备注
TCP
Transmission control protocol 传输控制协议
可靠的、面向连接的协议
传输效率低,类似于打电话
UDP
User datagram protocol 用户数据报协议
不可靠、无连接的服务
传输效率高,类似于群聊
例如:qq聊天使用udp,需要保证速度,丢包了大不了再发一次;
    但qq发文件使用tcp,需要保证文件完整
 
 
0
TCP在通信前需要建立关系来确认之间状态
 
0
UDP在通信前不需要建立关系来确认之间的状态
 
TCP与UDP数据包结构对比:
0
 
0
 
0
 
0
可靠,效率低
 
4.TCP会话的建立-三次握手:涉及标志位SYN,ACK
0
0
三次握手机制类似打电话:(确保身份状态的可靠性)
甲:你是小王?
乙:我是小王,你是小刘?
甲:好的,我知道了
 
第一次握手:
0
 
第二次握手:
0
 
第三次握手:
0
 
注意:建立连接至少3个包;可能大于3个,有可能连接不上重连;
 
5.TCP会话的确认:对每个数据包都会进行确认(影响资源的消耗,推出滑动窗口机制,只对部分进行确认)
Tcp协议对每个数据包进行确认:
    通过确认号Ark来确认;
    除了第一个数据包,其它包都有确认号;
    例如:
        客户端发的序列号Seq=1,数据时9字节,服务端给客户端的确认好Ack=10;
        Ack=10的含义:1】序列号+数据字节数 = 1+9 =10;2】告诉客户端,前面的数据都收到了,可以发送序列号为10的数据包了;
        同样的道理:服务端发送的序列号是1,发送20字节的数据给客户端;客户端给服务端的确认号Ack=21;表示收到数据,接下来可以发送序列号为21的数据包了;
    确认机制保证了发送数据的字节数正确;确认号Ack = 前面一个数据包的序列号 + 数据包的大小
    注意:并不是每个数据包都会确认一次,发送的包较多时会几个包一起确认;
0
 
TCP会话的拥塞和流量控制
    每一个数据包都会带一个字段叫窗口win;
    win表示在收到确认前可以发送的字节数;
    例如:
        服务端的win=3,用来告诉客户端,一次最多处理3个字节的数据;
        也就是说告诉客户端,在确认前,最多接收3个字节的数据包,发太快了处理不过来;
        客户端发送了3个包每个包1字节,占满了服务端的缓存区;然后客户端不能继续发了;
        服务端接完一个字节后,给客户端发确认消息,告诉客户端:我有一个字节的缓冲区可以用了,你可以再发送下一个包了;
    注意:使用的是滑动窗口机制;也就是说并不是一定要等缓冲区填满并接收数据完成才会发送确任消息;
0
根据窗口机制来控制网络拥塞(网络拥塞,主机接收服务器的数据不过来,服务器接收主机的请求不过来,可以根据窗口大小来调整)
 
6.TCP会话的结束-四次握手:涉及ACK、FIN
 
0
 
对于不带数据的消息,可以理解为一个字节;也就是说,像建立连接、断开连接之类的消息确认时,确认号Ark会+1;
例如:
    服务端告诉客户端要断开连接:FIN和ACK位置1 ;
    客户端收到消息后像服务端响应确认包:Ack位置1,确认号Ack = 服务端序列号+1;(消息类包不带数据,数据长度为1)
    客户端同时也会向服务端发送断开连接消息:ACK、FIN位置1;
    服务端收到客户端的断开连接的消息,发送确认包;
    然后双方断开连接;
0
  • TCP的三次握手一定是三次交互报文,四次握手可能不会有四次交互报文(比如主机直接拔电)
 
 
7.网络中最霸道的攻击 DDos
0
 
0
黑客控制僵尸网络向服务器发送TCP SYN ,并不会对服务器的回应。
 
 
8.UDP:用户数据报协议
0
 
0
 
 
9.TCP与UDP的区别:
 
传输控制协议TCP
用户数据报协议UDP
面向连接
无连接
可靠传输
尽力而为的传输
支持流控及窗口机制
无流控及窗口机制
仅支持点对点通信
支持任意通信方式(点对点,点对多点)
多用于注重数据的完整性
不要求数据的完整性,开销小
 
 
 
 
 
posted @ 2020-11-30 10:47  L丶银甲闪闪  阅读(159)  评论(0编辑  收藏  举报