Networking Programming (1) 网络基础

故事的小黄花,

从我进化成智障那年就飘着~

Additional: 有些IDE可以直接与代码存储库如Git,sourceForge等直接进行通信

TCP/IP存在的意义

不同的操作系统,不同的底层物理结构,计算机通过使用共同的一组协议来实现通信(协议:一组明确的规则,比如数据的格式,数据怎么分包等)

分层

网络中的每台机器都称为node,拥有全部功能的计算机称为host。每个网络节点都有来唯一标识节点的一组字节序列(地址)。Internet是最大的基于IP网络,没连入Internet的IP网络称为internet,比如Intranet。

字节序:大于一个字节类型的数据在内存中的存放顺序,不同种类的CPU采用不同的字节序

1. big endian

低字节存放在内存的高地址,数据在网络上的传输和JAVA虚拟机中多字节类型数据的存放也采用这种字节序

2. little endian

不同的网络以不同的方式给节点分配地址,而以太网Ethernet则通过产商来确保计算机的硬件地址,ISP(Internet Service Provider) 从四个区域的Internet注册机构获取IP地址并分配

将网络分层,可以修改实现而不动接口,每一层负责不同的通信功能,便于管理维护,每一层只与其上下层直接通信,实现解耦

  • 物理层(bits)

数据 -》在不同物理介质上传播的模拟信号(电磁波,光脉冲,无线电波等)

  • 链路层(frames)

职责:数据封装,检错,寻址(ARP)

链路层有很多协议,如Ethernet,无线,PPP和loopback等,路由器为不同的物理网络提供连接。OS中设备驱动器+network interface card处理物理接口细节

串行通信:在一条数据线上,将数据一位一位的依次传送

1. 同步,接收方和发送方必须时间同步

2. 异步,不需要时间同步,接收方根据电压来判断是否有数据发送

并行通信:数据在多条数据线上传送

Ethernet

帧:以太网数据帧的长度必须在46~1500字节之间(不包括CRC,起始符,源MAC,目的MAC等),一个帧往往包括帧起始符和结束符(MAC帧无结束符,因为两个帧间隔9.6us,而且只要少于64字节就丢弃,而PPP帧连续发送,需要结束符判断是否结束一个帧),SOH(start of head),EOT(end of tail)出现在数据中时,则要用转义字符

Q1:为什么帧必须不小于64字节??

保证NIC有足够的时间精确检测到冲突,这一最小的时间由可支持的最长电缆长度和电缆传播速度决定,如果节点收到冲突信号时,数据已经全部发送到目的地,则不重传,最远两台机器之间的round-trip time要小于512bits时间,512bits/8 = 64bytes,所以如果发送的帧小于64字节,就需要填充,但是不算入数据字段的长度。

CSMA/CD:在发数据前节点需要监听网线上的载波,如果9.6us之内没有检测到载波(使刚刚收到数据帧的节点来得及清理接收缓存,为下一个接收做准备),节点就可以发送一帧数据。如果两个节点同时检测到空闲发送数据,检测到冲突的节点会发送“冲突增强(32个1)”信号给介质上的每个介质。节点需要等待一段随机时间再发送数据。帧之前有64bits的前导序列,前7字节是同步码,最后一个字节是起始符。802.3与Ethernet V2规定的MTU不同,38~1492,同时支持以太网和IEEE802.3的NIC会根据长度区分。

Ethernet V2:

目的MAC+源MAC+长度+类型+CRC (6+6+2+46~1500+4)

PPP

在串行链路上封装IP数据报的方法,点对点

转义字符:0x7D

1.同步传输

零填充,连续5个1加0,这样就不会出现0x7E,接收端收到5个1就删除后面的0

2.异步传输

0x7E用0x7D, 0x5E表示

0x7D用0x7D, 0x5D表示

如果有控制字符,则前面加0x7D,后面也要做相应的改变

PPPoE:

现在用户牵宽带,自己在家里组局域网,几台电脑一起共享宽带。所以,PPP帧也需要装到以太网MAC帧中

环回接口:

允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。127网段的IP地址被预留给环回接口,一般使用127.0.0.1,被称为localhost。一个传给环回接口的IP数据报不能出现在任何网络上,当IP数据报离开网络层就被及时的返回。传给广播地址或多播地址也要传一份给自己,传给主机IP的报文都要传给自己(都是考虑从自己那里发出去的包)

ping127.0.0.1 VS ping 主机ip

前者测试服务器(TCP/IP协议)是否正常,后者测试网卡是否正常

串行线路吞吐量:

线路速率9600b/s,一个字节8bits,加上一个起始比特和一个停止比特,那么线路的速率就是960B/s,那么速率传送一个1024字节分组需要1066ms

ARP: IP->MAC地址

高速缓存(一般20分钟过期,除了绑定的情况下)

例:A->B(192.168.85.100)

查询ARP缓存,如果没有,A发一个ARP广播请求,目的MAC为FF-FF-FF-FF-FF-FF-FF-FF,目的IP为192.168.85.100,加上自己的源IP和源MAC。同一个网段内的所有计算机都会收到这个广播,如果IP和自己不一样,则舍弃;一样则更新自己的高速缓存(记下A的IP和MAC),并且单独恢复一个ARP应答给A(将源MAC,IP变为目的MAC,IP,用自己的MAC, IP替换源),A更新自己的缓存。

arp -a

  • 网络层(datagram)

职责:分包路由

数据报:20~60字节的头部 {首部长度4位,所以首部最大为60个字节(2^4-1)*4,TOS表示服务类型(如最小时延,最大吞吐,最高可靠性和最小费用,只能置其中一个服务,全为0时,是一般服务)。总长度是数据长度(最大2^16-1),是必要字段,因为帧会填充。一般主机要求不超过576字节,所以有赖TCP分割数据。标识字段用来标识主机发送的每一个报文。TTL(time-to-live)规定了数据报最多可以经历过多少路由器(最多255,默认32或64),当值为0,舍弃报文,并发送ICMP报文通知源主机。协议标志是指哪个协议向IP发数据,如ICMP。检验和是根据IP首部计算的检验字段(先把检验字段设为0,对首部每16位进行反码,再求和,接收方收到数据包时,根据首部计算检验和,如果没有错误,结果和检验和同或返回全是1,如果不是,丢弃,并不发错误报告,由上层负责重传)。因为路由过程中TTL不断减1,所以只需要在检验和加1就好了,不需要对IP整个首部进行重新进行。}

IPV4 - 32位,4个无符号字节(0~255)以“.”隔开

IPV6 - 128位,8个16bits以”:”隔开, 连续0区块可以不写或者用0代替

127.0.0.1 loopback

主机名 localhost

IPV6的回送地址是::1

所有以0.开头的IPV4地址都指向同一个本地网络上的一个主机。255.255.255.255广播地址,发送到这个地址,则本地网络上的所有节点都会收到(不能超越本地网络)

私网地址:

10.

172.16

172.31

192.168

NAT(network access translation): 外网<->私网

A-》B,若B路由器的缓存用完了,IP的处理方式是发送ICMP给A,然后由上层如TCP来完成可靠性

ICMP:为IP层通信提供一个维护,诊断和测试的框架,用于判断网络通不通,主机是否可达,路由器是否可用等。Ping过程实际上就是ICMP协议工作的工作,首先建立通道,然后发送包,对方接受后返回,还有网络命令和跟踪路由也是基于ICMP协议的。使用原始IP数据报在主机之间传递错误消息,JAVA不支持(only TCP/UDP),只能通过链接到原生代码来实现。

路由器2发现路由器4不可达,则发送一个ICMP给A

IP路由:

1. 如果TTL是0,就丢包

2. 搜索路由表,优先匹配主机

3. 搜索路由表,匹配子网

4. 搜索路由表,匹配网号

5. 发给默认路由

6. 同一个网络,建立缓存表,数据报被送往以太网驱动程序

7. 以上都失败了,就丢弃这个包,并产生ICMP错误包

路由器的内存中有一个路由表,收到一份数据报,搜索该表:

- 目的IP地址

- 下一站

- 标志(表明目的或者下一站是路由器还是直接接口)

子网寻址:

网络地址不够用(比如A类只有2^24-2),子网应运而生,子网掩码用来区分子网号和主机号:

掩码变长:汇总,减少占用路由表的空间

netstat:提供系统接口上的信息

主机也有路由器

  • 传输层(segment)

职责: 为两台主机的应用程序提供端到端的通信,reliability(顺序,完整性)

TCP:可靠,超时重传,可以将应用程序提交的数据分成合适的小块交给网络层,确认收到分组或者设置发送最后确认分组超时时钟等

UDP:不可靠,但是比较快

端口号:16bits,每一个端口监听一个服务

1-1023 保留给已知端口(服务器)

1024-5000 临时端口(客户端口,确保是本机唯一就可以啦)

  • 应用层

APP-KERNEL-NETWORK

WEB浏览器向WEB服务器发送获取网页的请求时,浏览器只能与本地客户机的传输层对话,传输层将请求分解成TCP片,添加序列号和校验和,然后将请求传递给本地网络层,网络层将TCP片分成IP数据报,并路由(IP),ARP(IP-》MAC),数据编码成特定物理介质的模拟信号

常见服务和应用

DNS: 一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。一个地址可以有多个名字,一个名字可以指示多个不同的地址(DNS负载均衡)

DHCP:IP地址有可能在程序运行时改变,所以每次需要时要检查当前的IP地址,而不是将其缓存。一个计算机启动时,它会发送请求给255.255.255.255,然后找到DHCP服务器

防火墙(网络层):检查传入或者传出网络接口的各个包,根据一组规则接受或者拒绝包。过滤一般是根据网络地址和端口的。

Proxy server(应用层):如果防火墙阻止某主机访问外界网络,此时向本地代理服务器(支持local caching)发送请求,然后代理去请求WEB服务器页面,将回应转发给主机。Socket代理服务器是作用在传输层,可以代理所有的TCP/UDP。公司可以使用代理服务器来跟踪员工的web使用情况。

代理器目前不能应对所有协议,通常已有的协议有HTTP,FTP等,可以通过HTTP来接入他们的协议,最著名的是SOAP

Reference

  1. JAVA 网络编程
  2. TCP/IP详解 卷1
时间: 2024-10-08 13:00:39

Networking Programming (1) 网络基础的相关文章

linux网络基础

学习linux,网络基础尤为关键,这是架设服务器的根基,没有网络,就没有服务. 简单介绍下网络常用的命令 ifconfig:传统的配置网络接口的命令 route:主要是配置路由功能 ip:集成了网络接口和路由配置,建议使用这个命令 hostname:设置主机名 ping:测试网络的连通性 host:dns信息查询 nslookup:dns解析查询 tcpdump:抓包工具,类似wireshark netstat:查看网络连接状态 ss:查看网络连接状态,推荐使用 1      ip路由 网络属于

Python服务器开发二:Python网络基础

Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如

网络基础(二)

网络基础(二) 配置网络高级命令nmcli(NetworkManager command line tool) nmcli命令修改是直接修改配置文件 命令语法:nmcli [OPTIONS] OBJECT { COMMAND | help } 一般常用选项是connection(con)和device(dev)可以tab (比较方便) [root@localhost ~]# nmcli agent connection device general help networking radio 显

Python服务器开发 -- 网络基础

Python服务器开发 -- 网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.... 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/I

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包

网络基础篇----计算机网络基本概述(1)

享受生活  热爱挑战                                                                刘明远分享    一   计算机网络基本概述(1) 每章一段话: 不要让自己闲下来,给自己找些事情做.哪怕是看看书. 正文   (提示:本章内容比较无聊,最好当看故事一样来看,不必记下只需了解,内容基础) 1什么是计算机网络 号称新的"电力火花"是以计算机.通信.信息技术为支撑的计算机网络技术. 计算机网络将两台或多台计算机通过电缆或网络设

网络基础

3.1 网络基础 001 问题:为什么要学习网络编程? 回答:(1)网络编程是一种实时更新应用数据的常用手段 (2)网络编程是开发优秀网络应用的前提和基础 002 网络基本概念 2-1 客户端(就是手机或者ipad等手持设备上面的APP) 2-2 服务器(远程服务器-本地服务器) 2-3 请求(客户端索要数据的方式) 2-4 响应(需要客户端解析数据) 2-5 数据库(服务器的数据从哪里来) 3.2 Http 001 URL 1-1 如何找到服务器(通过一个唯一的URL) 1-2 URL介绍 a

网络基础配置

1.网络基础知识一台主机如果可以连接公网,比如访问www.baidu.com 那么这台主机必然会有 ipaddress GATEWAY     dns       主机域名转换成ip的服务器 ############ipaddress############## tcp/ip ipv4 2进制32位 254.254.254.254/255.255.255.0 11111110.11111110.11111110.11111110/11111111.11111111.11111111.000000

网络基础实用知识(五)

第二章认识网络常用设备(一) 一.     家庭用路由器 1.家庭路由器图例 家用路由器在市场上品牌很多,设置方法看各路由器说明书.家庭路由器一般作为家庭网的出口设备. 2.家庭路由器连接示意图 3.设置方法 连线 按照说明书给的路由器ip地址,配置电脑ip与路由器同网段. 在浏览器里输入:http://路由器ip地址 输入说明书提供的用户名和密码登陆路由器 配置上网方式:根据你实际情况配置静态地址或者PPPOE拨号. 配置是否开启DHCP. 设置无线开放状态包括:SSID的发布.密码等. 联网