TCP/IP
在2018/12/15日重构,原转载文章以删除
在2019/1/11日更新
网络协议的分层以及传输流程
关于四层网络协议在Wireshark
中对应的位置
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
7 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 |
6 表示层 | 数据格式化,代码转换,数据加密 | 没有协议 |
5 会话层 | 解除或建立与别的接点的联系 | 没有协议 |
4 传输层 | 提供端对端的接口 | TCP,UDP |
3 网络层 | 为数据包选择路由 | IP,ICMP,OSPF,EIGRP,IGMP,ARP |
2 数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,MTU |
1 物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
一个包传输的过程如下图
动图如下
TCP和UDP的区别?
手机的主要功能只有两个–电话和短信,这两种方式的本质差别就是,打电话的时候要先“建立连接”(拨号),而短信不需要,建立连接需要花费一些时间,但也意味着更加可靠,我们在打电话的时候可以确保对方已经听明白。而短信发送后并不知道对方是否及时收到。
TCP
协议是基于连接的,而UDP
不需要连接。
用UDP
查询DNS
直接查询
用TCP
查询DNS
需要先建立3
次握手,查询完后建立第4
次握手(即结束)
TCP
协议中的包在Wiresharkd
的解析如下图
tip
:
用TCP
协议传送6
个数据包如果丢了一个那么直需要重传丢失的那个数据包
用UDP
协议传送6
个数据包如果丢了一个那么需要全部重新传
TCP协议的一些点
-
Seq
:表示数据段的序号 -
Len
:该数据段的长度 -
Ack
:确认号 -
MSS
:Maximum Segment Size
-
MTU
:数据包最大数据大小(MTU
和MSS
的解释在下面) -
SYN
:包含了Seq
,Win
,Len
,MSS
建立连接:
- 客户端发送
SYN
(SEQ
=x
)报文给服务器端,进入SYN_SEND
状态。 - 服务器端收到
SYN
报文,回应一个SYN
(SEQ
=y
)ACK
(ACK
=x
+1
)报文,进入SYN_RECV
状态。 - 客户端收到服务器端的
SYN
报文,回应一个SYN
(SEQ
=X
+1
)ACK
(ACK
=y
+1
)报文,进入Established
状态。
终止连接:
-
某个应用进程首先调用
close
,称该端执行“主动关闭”(active close
)。该端的TCP
于是发送一个FIN
分节,表示数据发送完毕。 -
接收到这个
FIN
的对端执行 “被动关闭”(passive close
),这个FIN
由TCP
确认。 -
一段时间后,接收到这个文件结束符的应用进程将调用
close
关闭它的套接字。这导致它的TCP
也发送一个FIN
。 -
接收这个最终FIN的原发送端
TCP
(即执行主动关闭的那一端)确认这个FIN
。
既然每个方向都需要一个FIN
和一个ACK
,因此通常需要4
个分节。
由于
TCP
是双向的,在一个连接中双方都可以是发送方,所以各自维护了一个Seq
号。
比如甲发送了“Seq
:x
Len
:y
”的数据段给乙,那么乙回复的确认号就是X
=Y
,这意味着他收到了x
+y
之前的所有字节,打个比方如下图52
号包的Seq
=5129
,Len
=1448
,所以来自接收方的53
号包的Ack
=5129
+1448
=6577
,表示收到了6577
之前的所有字节。理论上,接收方回复的Ack
号恰好就是等于发送方的下个Seq
号,所以我们可以看到54
号包的Seq
也等于5129
+1448
=6577
.
MSS
和MTU
用处
双方在建立连接的时候会把自己的MSS
告诉对方,MMS
加上TCP
头和IP
头的长度就得到MTU
发包的大小是有MTU
较小的一方决定的,比如说客户端的MTU
只有1500
而服务端的MTU
有9000
那么服务端传送数据过来只能把数据包分割成6
个包传送(分割包的工作是TCP
协议在做)反过来一样。
FTP协议
FTP
(File Transfer Protocal
)是文件传输协议的简称。用于Internet
上的控制文件的双向传输(说白了就是类似用来下载东西)。因为是明文传输如果用FTP
来登录,用抓包工具Wireshark
可以自己抓到明文的密码。
上图的意思是:要从IP
=10.32.200.41
,端口为208*256+185=53433
连接你的数据端口(公式中的256
为约定好的常数)
HTTP协议
HTTP
协议就是超文本传输协议的简称。由于HTTP
协议基于CTP
,所以要用就要先建立三次握手。这里提一下HTTP
协议也是明文传输用Wireshark
也是可以抓到的,如果要安全可以用HTTPS
协议,数据会被加密到"Encrupted Application Data"
里,解密的密匙在服务端。由于HTTP
协议特别常见用BurpUnlimited
做题都做烂了就不做叙述了。
TFTP协议
TFTP
(Trivial File Transfer Protocol
,简单文件传输协议)是TCP/IP
协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69
。
FTP
&TFTP
区别:
FTP
是完整、 面向会话、 常规用途文件传输协议。TFTP
用作 bones bare
- 特殊目的文件传输协议。
交互使用 FTP
。 TFTP
允许仅单向传输的文件。
FTP
依赖于 TCP
, 是面向, 连接并提供可靠的控件。TFTP
依赖 UDP
, 需要减少开销, 并提供几乎没有控件。
FTP
提供身份验证。 TFTP
不。
FTP
使用已知 TCP
端口号:20
的数据和 21
用于连接对话框。TFTP
用于 UDP
端口号69
其文件传输活动。
因为 TFTP
不支持验证 WindowsNT FTP
服务器服务不支持 TFTP
。
参考文章&书籍
https://blog.csdn.net/chaoshenzhaoxichao/article/details/79785318 |