zoukankan      html  css  js  c++  java
  • 《图解TCP/IP》读书笔记

    越发相信我之前认为的“用以致学”的观念了!  死记硬背的那些知识点,那么久时间过去大部分都忘了,但是遇到了一次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地址(数据链路层)

    -物理传输

    数据接收时处理的顺序相反 
    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实现的协议
     
     
  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/tzyy/p/4453018.html
Copyright © 2011-2022 走看看