zoukankan      html  css  js  c++  java
  • TCP/IP详解(整理)

    1.概述

    路由器是在网络层进行联通,而网桥是在链路层联通不同的网络。

    IP层用ICMP来与其他主机或路由器交换错误报文和其他的重要信息。应用程序也可以访问ICMP,两个诊断工具:Ping和Traceroute

    IGMP是组管理协议,用来把一个UDP数据报多播到多个主机;ICMP和IGMP的消息都是通过IP数据报来封装的

    IP的地址分类:5类:

    A (0 网络号7bit 主机号24bit);0.0.0.0 - 127.255.255.255

    B(10 网络号14bit 主机号16bit);128.0.0.0 - 191.255.255.255

    D(1110 多播组号28位);

    还可以分为3类IP地址:单播、广播和组播地址

    以太网数据帧长度 46-1500字节

    SLIP:串行线路IP 报文的封装格式是以c0开头和结尾的;而PPP协议是以7E来标志的

    环回接口:127.0.0.1 localhost;会将IP地址是环回地址或本地址的数据放入IP输入队列中,另外广播/多播地址的数据也会复制一份给环回接口

    以太网的MTU是1500字节,不同网络的帧的MTU不同,IP层会依据MTU给数据进行分片。如果数据要经过不同的网络,那么路劲中最小的MTU

    TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数目,通常为32或64

    IP是可以从TCP UDP ICMP IGMP接收数据报的

    ip地址中如果没有指定主机号,则指定网络上的所有主机

    路由表搜索的时候先匹配目的ip,不行则匹配目的网络号表目,还是不行则匹配默认表目,最后选择主机不可达不能传送。

    为每个网络指定1个路由器,缩小规模

    主机号可能会分一部分用来划分子网。例如B类地址16bit的主机号,用8bit来分子网,可以有254个子网,每个子网254个主机。子网对外部透明,但是对于内部的路由器是不透明的

    给定IP地址和子网掩码,就知道了是不是在同一个网络,同一个子网了。AB类地址一般都会子网划分

    ifconfig和netstat命令查找网络接口相关的信息,netstat还可以查看路由表信息

    IP主要有地址不够用,路由表规模以后可能会比较大这些问题

    ICMP可以有查询报文,还可以有差错报文,不可达时候发送,报文必须包括生成该差错报文的数据报IP首部,还必须包括后面的前8个字节,这里面包含了TCP或UDP中的源和目的端口号

    ping发送一份ICMP回显请求报文给主机,等待返回ICMP回显应答。是对两个TCP/IP系统连通性进行测试的基本工具,集成在了内核里。不经过传输层

    traceroute程序能记录路由的路径,通过发送TTL为1的UDP数据报,然后每次将TTL加1,,路由器会丢弃数据包返回ICMP超时报文,最终主机会产生一个ICMP端口不可达的报文

    动态选路:内部网关协议IGP(选路信息协议 RIP,最短路径优先 OSPF),外部网关协议 EGP(边界网关协议 BFP)

    UDP具有伪首部,是12字节,自己的首部是8字节,UDP和TCP都加入伪首部,是为了计算校验。UDP的校验是对整个数据的校验,端到端。

    IP层的分片,每个接口可能会是不同的网络,MTU可能不同。数据报可能在中途进行分片,每个片具有相同的标识flag,还有一个标识字段用来表示是否还有更多的片。如果某个分片丢失,是需要重传整个数据报的。传输层的头部信息只出现在第一个分片中。如果IP数据报需要被分片而标识中设置为不分片DF,那么会发送ICMP不可达差错报文。

    UDP与ARP的交互:当数据报被分片后,如果需要arp寻址,则有几个分片就会发送几个arp请求,当接收第一个arp请求后,只有最后一个报文会被发送到特定的主机。

    广播和多播只应用于UDP,前提是不面向连接。大多数的网卡都能接受目的地址为多播地址或某些子网多播地址的帧。

    广播增加了对于广播数据不感兴趣主机的处理负荷。因为这些数据还是会上传到UDP层才被丢弃。多播减少了部分负荷,主机可加入一个或多个多播组。

    广播地址也分为全网和子网广播地址,主机号必须全为1.

    多播组的地址其实是D类地址,多播组id有28位。不限制组内主机的个数。多播地址的以太网地址首字节必须是01,ip地址的低位23bit映射到以太网地址

    组管理协议IGMP就是让物理网络上的所有系统知道主机当前所在的多播组

    tcp首部20字节中前4字节分别是两个端口号;然后是4字节的序号和4字节的确认序号,之后4字节中包含6个特殊位和2字节的窗口大小(最大为65535字节);

    URG紧急指针,ACK,PSH接收方应该尽快将报文段发送给应用层,RST重新连接,SYN同步发起连接,FIN

    MSS最大段长度,一般是1024,有些可以协商

    四次挥手是因为tcp是全双工的,每个方向需要单独来关闭

    time wait有2MSL等待时间,报文段最大生存时间,是为了能接收可能的再次FIN,

    半打开连接是因为一方可能突然掉电关机,然后重启后,启动新的连接,之前的半连接就一直在。TCP处理原则是接收方以复位做为应答

    对于同时建立连接,双方只建立一条连接,同时关闭也是差不多的,没有太多区别,都是允许的

    呼入连接请求队列:该队列中的连接已经握手完成但是还没有被应用层所接受,队列的最大长度称为积压值

    使用nagle算法减少小报文的数目

    四种定时器:重传定时器、坚持、保活和2MSL定时器

    拥塞窗口cwnd和慢启动门限ssthresh,发送方能发送的大小为cwnd和接收方通告的窗口的最小值

    慢启动(其实开始是指数增长cwnd,当到了门限后加1增长)和拥塞避免(快恢复)算法

  • 相关阅读:
    RedHat Openshift 搭建个人博客(wordpress)指南
    Sokcet方式请求HTTP/HTTPS的封装类HttpHelper
    不花钱的主机
    关于IE、火狐等浏览器兼容问题的总结
    ios平台调用WCF
    Windows Writer的服务提供器
    QQ开放平台 OAUTH2.0 QqConnetSDK 登录,运行原理,附源码。
    Learning Cocos2dx for XNA——深入剖析Hello World
    Albacore.NET下基于Rake(ruby make)的自动化构建工具
    排序算法
  • 原文地址:https://www.cnblogs.com/zhang-qc/p/9665854.html
Copyright © 2011-2022 走看看