越发相信我之前认为的“用以致学”的观念了! 死记硬背的那些知识点,那么久时间过去大部分都忘了,但是遇到了一次ICMP包实际应用的情况,这个IP协议的辅助协议已然牢记在心!
学了不用,或者没有需求的情况下去学,学习的意义和效率都堪忧。这一点和高中到大学的数学课程教育很像,我很清楚数学的重要性,但是以前学的数学知识基本都忘记了,这也是学了不用的原因吧。
2015.10.24 补充工作中遇到的实际问题:使用ICMP定位问题
有一次从服务端发出TCP消息,但是手机客户端没有收到。设服务器为A,客户端为B。
使用wireshark抓包发现,每次A→B的TCP的数据发出去之后,都会收到一个B→A的ICMP包,然后就是A→B的TCP重发,如此重复几次。
扒开ICMP包看到一个提示:port xxxx unaviliable。 下面一段说明可以解释原因:
那个提示就是一个错误报告,说明客户端发起连接的那个端口不可达了。
现在只是胡乱地记了一下,有空了补上比较易懂的图。
第一部分 基础知识
1.TCP/IP是协议族,包括ISO7层模型中的多层中的协议。 如ip、tcp、udp、http等。
2.ISO7层模型 方便记忆的叫法:物理数据链路 网络传输 会话表示应用
第二部分 数据链路
1.数据在网络中传输的处理顺序
循环冗余校验&应用包头及数据(应用层)
-目标端口号&源端口号(传输层tcp/udp...)
-上层协议类型&目标ip&源ip(网络层 即ip层)
-以太网类型&发送端mac地址&接收端mac地址(数据链路层)
-物理传输
数据接收时处理的顺序相反
-目标端口号&源端口号(传输层tcp/udp...)
-上层协议类型&目标ip&源ip(网络层 即ip层)
-以太网类型&发送端mac地址&接收端mac地址(数据链路层)
-物理传输
数据接收时处理的顺序相反
2.交换机工作在第2层 即数据链路层 路由器工作在第3层 网络层。 数据链路是小型以太网连通,网络负责通过ip连接各个数据链路组成互联网
第三部分 IP协议
1.面向无连接 制定行程表做火车然后飞机然后汽车,交通工具就是数据链路,行程表就是路由表,各站点就是节点(主机&路由器,有IP)
2.ip由网络标识和主机标识组成, 192.168.128.10/24 就代表从0数到24位是网络标识,也就是192.168.128为网络标识,10为主机标识
ip分为ABCD四类 二进制开头分别为0 10 110 1110 网络标识分别占7位 6+8位 5+8+8位 4+8+8+8位
D类IP木有主机位,一般用于多播
其他类一个网络内最多主机个数正常算,C类的少两个,一个0.0.0.0为主机不可用时使用,一个1.1.1.1为广播时使用
广播不可穿透路由器,多播可以,但是要求路由器和主机都是多播地址
3.子网掩码,连续1+连续的0,一共32位组成,有多少个1就代表ip有多少位是网络位,配合ip唯一确定一个地址用于灵活制定网络位的长度,以避免资源浪费
4.ip报文可能会在路由器被分片,在主机组合,路由器不会组合,因为下一层路由器还有可能分片
第四部分 IP协议相关技术
1.DNS根服务器存储第一层DNS服务器的IP地址。 存储内容包括 通过域名找IP:A记录、CNAME:主机别名对应的规范名称、通过IP找域名:PTR 上下层DNS服务器的映射 NS记录
2.DCHP 自动设置IP地址,同一管理IP地址分配的服务。
3.NAT 主机通信的过程中公网和私网IP的转换,实现通过一个IP和多台主机通信
4.IP隧道 在IPv6和IPv4的网络之间通信时,IP首部相互无法识别,此时就通过IP隧道在IPv6的IP协议头部之后附加一个IPv4的IP头部
5.ARP 在同一个网段内,发出带IP地址的ARP请求包,对于IP地址的设备收到请求后,返回ARP响应包,告知其MAC地址,用于通过IP地址查询MAC地址,以使数据可以在不同网段之间传输。虽然知道IP地址就知道设备位置了,但是数据链路中实际传输的时候还是需要MAC地址的,所以需要ARP协议。反过来,通过MAC地址获取IP的协议是RARP。
6.ICMP。用于确认IP包是否成功送达到目标地址,PING命令就是用这个协议实现的。
第五部分 传输层 TCP、UDP
1.ip报文头部里边记录上一层协议类型,传输层的头部会记录端口号,以确定数据发给哪个应用程序。系统会开启各种守护进程,通过不同的端口号把数据发给不同协议的守护进程
2.相同传输协议不能使用同一个端口,但是不同的传输协议是可以使用同一个端口的,数据被分发到不同的进程了
3.UDP是面向无连接的协议,只管发,其他的如收到确认、异常重发全不管,都交给上层的应用去处理
4.TCP的主机每次收到数据,都会发送一个ACK,数据有误则回复NACK(negtive ack)。根据网络情况,超时没收到ack包就重新发送
5.建立连接:SYN—ACK+SYN—ACK 断开连接:FIN—ACK—(发送没发送完的消息)—FIN—ACK,客户端服务端都可以发起断开连接,发起FIN后处于半关闭状态,只接受消息,不发送消息,发起并收到FIN各一次之后才关闭连接
6.使用窗口来提高网络状况不佳时的传输效率,即不是 发送-ack-发送-ack,而是发送发送发送-ackackack-发送发送发送-ackackack ......
7.拥塞控制,设置拥塞窗口,慢启动,最初设置拥塞窗口大小为1,每收到一个ack拥塞窗口+1(或者根据一个阈值来增加),比较拥塞窗口和接收端窗口大小,每次发送比较小的那个数量个报文段
第六部分 路由协议
未关注
第七部分 应用协议
1.远程登录 telnet 通过一条TCP连接向主机发送文字命令并在主机上执行
2.SSH 加密版本的telnet,并支持更多功能
3.文件传输 FTP 使用TCP协议,开启两个TCP连接,一个用于控制,一个用于文件传输
4.邮件 SMTP TCP协议实现 Simple Mail transfer protocol。
5.HTTP 基于TCP连接。http1.1每次会话都建立一个tcp连接,完成后关闭,tcp1.1允许在一个tcp连接上进行多次会话
6.网络管理 SNMP 使用UDP实现的协议
7.多媒体、即时通讯等技术,即使丢一些包,也喜欢网络延时快一点,由于UDP不用像TCP一样做流控制、拥塞控制、重发机制等,其数据到达主机要快一些,这类应用多采用基于UDP实现的协议