Life is not a rehearsal
"人生没有彩排"
参考资料:TCP/IP入门经典 (第五版)
一、什么是TCP/IP
TCP/IP是一族定义了网络数据传输规则的协议,现在大多数的网络设备都使用TCP/IP协议进行通信
二、TCP/IP分层
1、分层
应用层 | |
传输层 | |
网络层 | |
数据链路层 |
2、各层的主要功能
● 数据链路层:处理通信电缆与接口的细节,将网络层传来的IP数据报转化为帧,再转化为比特流,使其能在通信介质之间传输
● 网络层:提供逻辑寻址的功能,使数据传输独立于硬件地址
● 传输层:为两台主机上的应用程序提供端到端的通信,提供了流量控制、错误控制和确认服务
● 应用层:处理特定的应用程序细节
3、各层上的常见协议及简介
各层上的协议
(自己把书上的图重新画了一遍...)
协议简介:
● TCP:提供可靠的传输层服务,面向连接
● UDP:为应用程序发送和接收数据报,无连接,不可靠
● IP:网络层的核心协议,提供逻辑寻址、路由选择等服务
● ICMP:IP协议的附属协议,用来与其他主机或路由器交换错误报文和其他重要信息
● IGMP:Internet组管理协议,用来把UDP数据报多播到多个主机
● ARP和RARP:用于将IP地址和硬件地址相互转换
三、一些重要的概念
1、IP地址:IP地址是网络层抽象出来用一个32bit(IPv4)整数来表示的逻辑地址,用于唯一地标识网络上的每一台设备,常用的表示方法是点分十进制,如:192.168.1.1
IP地址分类:
各类IP地址的范围:
2、物理地址(MAC地址):网络设备的身份标识,出厂时就已经固化在网络硬件当中,在以太网中使用48个bit来表示,常用6个以冒号分隔的十六进制的整数来表示,如: 00:0C:29:D2:58:6B
3、端口号(port):端口号是应用程序对于传输层的一个身份标识,传输层通过端口号来区分不同的应用程序,TCP和UDP采用16bit的端口号来识别应用程序
4、套接字(socket):由IP地址和端口号组合而成的地址,如:111.121.131.141.21指向IP地址为111.121.131.141的主机的21号端口
5、子网掩码(mask):类似于IP地址的32bit的地址,可以区分网络号和主机号,用于判断IP地址是否在本地子网内
6、域名系统(DNS):域名系统是一个分布的数据库,提供IP地址和主机名之间的映射信息
7、IP首部的协议域:在IP首部中有一个长度为8bit的协议域,用于标识数据报来自于上层的哪一个协议
8、封装:当用户从本机的应用程序发送数据到网络上的某一台主机时,数据将从协议栈的顶部往下,逐层添加相应的首部(和尾部),然后到达链路层转换为比特流发送到传输介质,这个过程称为封装。其过程如下:
9、分用:当主机接收来自传输介质的数据时,比特流将从协议栈的底部往上,逐层去掉相应的首部(和尾部),并根据首部信息发送给指定的协议,最后根据端口号发送给应用程序,用户收到数据,这个过程称为分用。其过程如下:
10、标准文档:关于TCP/IP标准,可以访问 RFC文档
四、简单描述一次数据传输的全过程
假设现在我要从我的电脑上发送一份数据到某台主机,假设我使用传输层的TCP,那么具体流程将类似下面这样:
注:这里不讨论更深的细节,比如IP分片、ARP解析、丢包等
封装:①~④
①我将数据准备好,并点击了发送,应用程序通过指定端口将数据发送至传输层的TCP;(应用层)
②TCP加上TCP首部(包含源端口号和目的端口号等信息)后封装为TCP分段,传输层将TCP分段发送至网络层的IP;(传输层)
③IP加上IP首部(包含本机的IP地址和目的IP地址等信息,已经经过DNS解析)后封装为IP数据报,网络层将IP数据报发送至数据链路层;(网络层)
④数据链路层加上以太网首部和尾部后将IP数据报封装为以太网帧,经过更细分的子层将以太网帧转化为比特流,然后传输到我所在的子网的路由器;(数据链路层)
IP寻址和路由选择:⑤~⑥
⑤子网的路由器将比特流转化为以太网帧,数据链路层将以太网帧去掉以太网首部和尾部,发送至IP层;(数据链路层)
⑥IP层检查数据报的IP首部,先根据子网掩码判断目的IP地址是否在本地子网内:(网络层)
● 如果目的IP地址在本地子网内,路由器会将数据报封装后经数据链路层发送给指定主机或路由器
● 如果目的IP地址不在本地子网内,那么路由器将数据报封装后经数据链路层发送给当前路由所在的子网的路由器(向上一层的网络传送),路由器收到后继续执行⑤
分用:⑦~⑩
⑦目的主机收到比特流以后转化为以太网帧,去掉以太网首部和尾部,发送给网络层的IP;(数据链路层)
⑧IP检查IP数据报,发现目的IP地址就是本机IP地址,去掉IP首部后根据`协议域`发送给传输层的TCP;(网络层)
⑨传输层根据目的端口号将去掉TCP首部后的数据发送至指定的应用程序;(传输层)
⑩应用程序接收数据;(应用层)
至此,就完成了一次完整的数据传输~~
TCP/IP-入门的更多相关文章
-
TCP/IP入门(4) --应用层
/** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.****.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...
-
TCP/IP入门(2) --网络层
/** 本篇博客由 126(127不可用) 2^24 -2 B 2^14 -1 128.1 191.255 2^16 -2 C 2^21 -1 192.0.1 223.255.255 2^8 -2 D ...
-
TCP/IP入门(1) --链路层
/** 本博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.****.net/zjf280441589/article/category/1854365 */ TCP/IP体系结 ...
-
《TCP/IP入门经典》摘录--Part 3
TCP/IP协议系统 3.子网划分和CIDR 子网 划分网络 为什么需要划分子网? 子网划分就是在网络 ID 之下提供了第 2 层逻辑组织.路由器能够把数据报发送给网络里的某个子网地址(一般对应于一个 ...
-
《TCP/IP入门经典》摘录--Part 2
TCP/IP协议系统 1.网络访问层 网卡(network adapter),即网络接口板,又称网络适配器或NIC (网络接口控制器),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,由 ...
-
《TCP/IP入门经典》摘录--Part 1
TCP/IP基础知识 什么是TCP/IP Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...
-
TCP/IP入门(3) --传输层
原文:http://blog.****.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...
-
TCP/IP入门学习(2)---OSI分层
一.会话层以上的处理 1.表示层 将数据从主机特有的格式转换为网络标准传输格式.以此使得不同环境之间的通信成为可能. 2.会话层 即决定使用哪个连接或者哪种连接方式将数据发送出去.会话层也会在数首部添 ...
-
TCP/IP入门学习(1)---分层概述
本文旨在记述一些学习中的笔记 OSI分层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 详细点: 1.应用层:为应用程序提供服务并规定程序中通信相关细节. 2.表示层:将应用处理的信息转 ...
-
TCP/IP、Http、Socket、XMPP-从入门到深入
TCP/IP.Http.Socket.XMPP-从入门到深入 终极iOS程序猿 2016-12-29 18:27 为了便于大家理解和记忆,我们先对这几个概念进行的介绍,然后分析他们的不同,再进行详细的 ...
随机推荐
-
java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
-
ubuntu apache开启重写模块
http://www.iblue.cc/2011/09/ubuntu-apache%E5%BC%80%E5%90%AF%E9%87%8D%E5%86%99%E6%A8%A1%E5%9D%97/ Ubu ...
-
使用Node.js和Redis实现push服务--转载
出处:http://blog.****.net/unityoxb/article/details/8532028 push服务是一项很有用处的技术,它能改善交互,提升用户体验.要实现这项服务通常有两种 ...
-
【转】 Volley NegativeArraySizeException 解决
http://blog.****.net/very_caiing/article/details/46241531 今天在百度统计看项目上有一个crash比较高的bug: Java.lang.Nega ...
-
[置顶]Win2012R2的一个Bug安装群集后可能引发的软件崩溃问题及相应补丁
[置顶]Win2012R2的一个Bug安装群集后可能引发的软件崩溃问题及相应补丁 如标题,笔者查阅资料发现微软声称安装故障转角色后就可能发生上述描述问题,但不止于SSMS崩溃.建议使用win2012R ...
-
自己封装的HttpRequest,个人觉的比较HttpHelper好用
新年开篇,忙归忙,还是要写点什么,不然越来越懒,分享我写的HttpTooler public delegate void RequestCompleted(object sender, string ...
-
使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中
一. 解压kettle包 1.把包拷到Linux系统下 还有mysql的驱动包 2.解压zip后缀的包 输入命令:unzip /software/pdi-ce-7.0.0.0-25.zip ...
-
Centos下的GitLab的安装汉化和数据备份以及管理员密码重置
前言: 安装版本:gitlab-ce-8.8.5-ce.1.el7.x86_64.rpm 下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yu ...
-
解决Zabbix网页端Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No route to host问题
在安装配置完zabbix_agentd以后,网页端出现 Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No ...
-
Android Gson 操作
JSON序列化后的数据不带类名与名命空间,所以这两个服务端跟客户端可以不对应,需要保证字段对应即可 Asp.net MVC端 using System; using System.Collection ...