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 |