OSI,TCP/IP,五层协议的体系结构,以及各层协议
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
每一层的协议如下:
物理层: RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层: IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层: TCP、UDP、SPX
会话层: NFS、SQL、NETBIOS、RPC
表示层: JPEG、MPEG、ASII
应用层: FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层作用:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到目的地的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误检查(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
网络层
只提供简单灵活的,无连接的,尽最大努力交付(不可靠交付)的数据报服务。发送时候不需要先建立连接。
(这层不提供服务质量保证,因计算机是智能的,让差错处理,流量控制交给传输层处理)
IP地址的分类
A类地址
以0开头, 第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);
私有地址:10.0.0.0 ~ 10.255.255.255
B类地址
以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
私有地址:172.16.0.0—172.31.255.255
C类地址
以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);
私有地址: 192.168.0.0—192.168.255.255
IP地址与子网掩码相与得到主机号
子网划分-主机数
一个网络号192.168.5.0/24,子网掩码是255.255.255.248,可以构建的最大子网数和每个子网最多可容纳多少台机器?
题目给出的IP地址空间基于CIDR划分,前24位是网络号,后8位是主机号。子网掩码最后是 248(1111 1000)。
相当于主机号又被分成两部分, 前5位是子网号, 后3位是主机号,所以,最大子网个数是 2^5, 主机个数为 2^3. 另外,主机号全 0 代表本地主机, 全 1 表示广播,所以每个子网最多容纳8 - 2 = 6台机器。
ARP
地址解析协议:IP->物理地址
APP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址。
- 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
- 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
- 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
RARP
逆地址解析协议,物理地址->IP
ICMP
网际控制报文协议 ICMP(差错报告报文 询问报文)
差错:重点不可达源点抑制 时间超过 参数问题 改变路由
询问:回送请求或回答 时间戳请求或回答 如ping 没有用tcp/udp
三次握手,四次挥手
http://blog.csdn.net/lis_12/article/details/54934272
TCP的滑动窗口,流量控制和拥塞控制
TCP协议作为一个可靠的,面向字节流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由拥塞窗口结合一系列的控制算法实现。
滑动窗口协议
“窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;
“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。
流量控制
接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。
主要方式就是返回的报文中会包含接收窗口大小,利用窗口大小来控制发送方的数据发送大小。
发送方的发送窗口应该小于等于拥塞窗口
拥塞控制
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
常用控制方法:慢开始、拥塞控制、快重传、快恢复
超时重传
TCP协议保证数据可靠性的重要机制,在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
TCP(TCP报文段)
面向连接的运输层协议
一对一(点对点)
可靠交付
全双工通信
面向字节流
UDP(UDP用户数据报)
(报头包括: 源端口号 目的端口号数据报长度 检验和)
无连接
支持 一对一、多对一、一对多的交互通信
尽最大努力交付(即不可靠交付 主机不需要维持复杂的链接状态)
面向数据报
没有拥塞控制
首部开销小(仅有八个字节)
TCP和UDP的区别
- TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
- TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
- TCP注重数据安全性,UDP数据传输快。
面向和非面向连接
面向连接的服务:通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务:不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。
TCP和UDP对应的协议
TCP对应的协议:
- FTP: 端口 = 21, 定义了文件传输协议;
- SSH: 端口 = 22, 专为远程登录会话和其他网络服务提供安全性的协议;
- Telnet: 端口 = 23, 一种用于远程登陆的协议,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
- SMTP: 端口 = 25, 邮件传送协议,用于发送邮件;
- POP3: 端口 = 110,和SMTP对应,POP3用于接收邮件;
- HTTP: 端口 = 80, 是从Web服务器传输超文本到本地浏览器的传送协议;
- HTTPS: 端口 = 443,HTTP的加密版本;
UDP对应的协议:
- DNS: 端口 = 53, 用于域名解析服务,将域名地址转换为IP地址;
- SNMP: 端口 = 161,简单网络管理协议,用来管理网络设备。由于网络设备很多,无连接的服务就体现出其优势。
- TFTP: 端口 = 21, 简单文件传输协议;
DNS,域名解析
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
点击www.baidu.com
简易版:
浏览器分析页面指向的URL
向DNS请求解析出www.baidu.com的IP地址
域名系统DNS解析出www.baidu.com的IP地址
建立TCP连接(http本身是无连接,无状态)
浏览器发出相应的命令
服务器给出响应,将结果发给浏览器
释放TCP连接
HTTP状态码
1xx 表示请求已被接受,需要继续处理
2xx 表示成功
3xx 表示重定向 如请求还需要进一步操作,301 永久,302临时
4xx 表示客户端出现错误,403禁止,404未找到
5xx 表示服务器端出现错误
Get与Post区别
操作方式 | 数据位置 | 明文密文 | 数据安全 | 长度限制 | 应用场景 |
---|---|---|---|---|---|
GET | HTTP包头 | 明文 | 不安全 | 长度较小 | 查询数据 |
POST | HTTP正文 | 可明可密 | 安全 | 支持较大数据传输 | 修改数据 |
socket编程流程
server
- 通过 socket() 函数向系统申请一个套接字
- 调用 bind() 函数定义一个侦听端口号
- 调用 listen() 函数侦听请求
- 组织循环,处理收到的每一个请求
- 用 accept() 函数建立交换数据的通道
- 用 read() 函数读取请求报文
- 根据请求报文进行处理,生成响应报文
- 调用 write() 函数返回响应报文
- 调用 close() 函数关掉套接字
client
- 通过 socket() 函数向系统申请一个套接字
- 调用 connect() 函数与server建立连接
- 调用 write() 函数发出请求报文
- 调用 read() 函数读取响应报文
- 调用 close() 函数关掉套接字
转载请注明作者及原文地址(http://blog.csdn.net/lis_12/article/details/55003623)
如果觉得本文对您有帮助,请点击‘顶’支持一下,您的支持是我写作最大的动力,谢谢。