网络协议知识总结 -「传输层」
网络协议有着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
15var 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
16var 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
总结
关于为什么说传输层知识这么重要?
因为应用层由下层协议,也就是传输层支持的,想要高效的网络,需要从传输层上入手。
就是一个查缺补漏和知识补全的文章