1.网络协议知识总结 -「传输层」

网络协议知识总结 -「传输层」

网络协议有着7层协议:应用层、表现层、会话层、传输层、网络层、链路层、物理层;

往往用到的是传输层应用层这几层的知识点,毕竟这是软件开发,尤其是web开发中最重要而必须的知识点。

传输层是什么?

再传输层上是端与端之间的交互,更准确是各个端上的进程之间的数据交互。

传输层主要协议

主要包括 TCP / UDP 协议。

TCP 和 UDP 从属的协议栈

TCP 和 UDP 从属的协议栈
应用层
TCP \ UDP
TP
网络接口

什么是TCP 和 UDP? 它们之间的区别又是什么?

/ TCP UDP
含义 传输控制协议 用户数据报协议
特点 1.面向连接,需要建立连接才可以进行操作;
2.端到端,端与端之间连接的套接字是唯一的;
3.有拥塞控制
4.可靠连接、不丢包
5.使用字节流传输
6.首部的字节是20字节
1.无连接,不需要建立连接就可以操作;
2.端与端之间关系可以1:1,1:n,n:1,n:n
3.没有拥塞控制
4.连接不可靠,容易丢包
5.使用报文传输
6.首部的字节只有8字节
包含协议与端口 HTTP(80)
FTP(21)
telten(23)
SMTP(25)
(TCP只有这4个端口)
DNS(53)
TFTP(69)
SNMP(161)
等等除TCP4个端口以外都是UDP从属

关于 TCP 和 UDP 的常用端口

DNS TFTP SNMP HTTP TElNET FTP SMTP
53 69 161 80 23 21 25
UDP UDP UDP TCP TCP TCP TCP

一些知识

UDP 用处

UDP 由于它不需要通过连接确认就可以传输,同时它消耗资源少,处理快速并且灵活,关键是即使在网络差的时候容易丢包,但是丢包数量对音频视频这类处理场景影响小,所以UDP在传输音频、视频和IP电话上的用途很广,主要是使用UDP协议。

注意

关于 TCP 连接的 3次握手 和 4次挥手,这里不做具体讲述了。

具体就不说了,这里使用node来说一下TCP的连接

具体代码: node-tcp

以下引用的node模块主要是 net ,专门使用在 TCP

  • 建立服务端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var net = require('net')

    var server = net.createServer(function(e){
    e.on('data',function(data){
    e.write('halo')
    })
    e.on('end',function(){
    console.log('连接断开')
    })
    e.write('welcome!')

    })
    server.listen(8124,function(){
    console.log('服务建立')
    })
  • 建立客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var net = require('net')

    var client = net.connect({
    port: 8124
    },function(e){
    console.log('客户端连接');
    })
    client.on('data' ,function(data){
    console.log('接受到服务端给的信息:'+ data.toString());
    })
    client.on('timeout',function(){
    console.log('当前连接已经被闲置!')
    })
    client.on('end',function(){
    console.log('连接关闭!')
    })

图示

思路是

建立服务端和客户端,服务端调用 wirte() 发送数据,客户端监控进程,当发现服务端有数据发送来时,客户端输出从服务端中得到数据;

当服务端进程监控到客户端关闭时,触发 end 事件,直接输出连接断开

命令行工具

使用 telnet nc 等工具可以监控到这样的结果。

如何更准确看到TCP连接过程?

建议: 可以使用网络监测工具 WireShark

总结

关于为什么说传输层知识这么重要?


因为应用层由下层协议,也就是传输层支持的,想要高效的网络,需要从传输层上入手。

就是一个查缺补漏和知识补全的文章