文章目录

  • 1.分层模型
    • 1.1OSI七层模型
    • 1.2TCP/IP四层模型
  • 2.网络应用程序设计模式
    • 2.1C/S【client/server】
    • 2.2 B/S【browser/server】
    • 2.3协议的概念
  • 3.协议
    • 3.1网络接口层协议-----以太网帧协议
    • 3.2网络层协议----IP协议
      • IP协议的首部格式(IPV4)
      • IP地址
    • 3.3传输层协议----TCP/UDP协议
      • TCP的三次握手【重点】
      • TCP四次挥手【重点】

1.分层模型

1.1OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。
  • 每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

1.2TCP/IP四层模型

应用层—http,ftp,ssh

传输层----TCP/UDP协议

网络层----IP协议

网络接口层-----以太网帧协议

比如我们使用QQ向朋友发送消息:

2.网络应用程序设计模式

2.1C/S【client/server】

优点

  • 协议选用灵活
  • 可以缓存数据

缺点

  • 对用户安全构成威胁
  • 开发工作量大,调试困难

2.2 B/S【browser/server】

优点:跨平台
缺点:只能使用http

2.3协议的概念

  • 规则:数据传输和数据解释的规则
  • 原始协议----->(改进、完善)------> 标准协议
  • 典型协议:TCP/UDP HTTP FTP IP ARP

3.协议

3.1网络接口层协议-----以太网帧协议

以太网帧大小必须在641518字节(不包含前导码和定界符),即包括目的地址(6B)、源地址(6B)、类型(2B)、数据、FCS(4B)在内,其中数据段大小在461500字节之间。

认识MAC地址(网卡编号)

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

类型2字节

当类型为0800时,正常发送IP数据报

当帧类型为0806时,会发送arp数据报-,根据IP获取对方的mac地址

当帧类型为0835时,会发送parp数据报,返回自己的mac地址

arp数据报,根据IP获取对方的mac地址【比如我们从北京向上海的主机发送消息,要获取广州主机的MAC地址】

认识IP

IP协议有两个版本, IPv4(32位)和IPv6(128位)

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
  • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
  • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

3.2网络层协议----IP协议

  • IP(Internet Protocol)网际协议,是TCP/IP协议的核心部分。
  • 目前IPV4仍然是IP协议的主流版本。如果想要在互联网这个共享网络中精确定位到一台主机,那么就一定需要该主机的IP地址。
  • 主机是拥有IP地址,但是不能进行路由控制(Routing,意思是中转、分组数据包)。路由器(Router)这种设备既有IP地址,又可以进行路由控制;我们可以将接入互联网中的主机和路由器都叫做节点。

IP协议的首部格式(IPV4)

组成部分

  • 4位版本号:用来指定IP协议的版本,IPV4的版本号为4,前4位存储0100。IPV6的版本号是6,前4位存储0110
  • 4位首部长度(Internet Header Length):表明IP首部的大小,单位是4个字节,length * 4的字节数,因为这一字段共4个比特位,所以这一字段最大值为2 ^ 4 - 1即15,所以IP首部最大长度为15 * 4即60字节;在默认情况下,该字段被设置为5,所以默认IP首部20字节。
  • 8位服务类型:前三位表示优先度(已经弃用),第4位表示最低延迟、第5位表示最大吞吐、第6位表示最大可靠性、第7位表示最小代价,这四位互相冲突,只能选择一个。需要根据不同情况进行选择,如果是SSH/TELNET这类远端登录,那么就应该选择最小延时,如果是FTP类型的程序,则应该选择最大吞吐量;第8位是保留位,目前没有使用,必须填0。
  • 16位总长度(Total Length):表示IP首部和后面携带的数据部分一共有多少个字节。该字段有16个比特位,因此IP数据报整体最大长度为65535个字节。
  • 16位标识(ID):唯一地标识主机发送的报文,如果一份IP报文在数据链路层被分片,那么每一片的该字段应该都是相同值。帮助对端主机在接收后进行分片重组。
  • 3位标志(Flag):第一位保留(保留的意思是现在不使用,未来如果需要的话再使用),必须填0;第二位用来指明是否可以分片,如果为0则可以分片,如果为1则不能分片。
  • 13位片偏移(Fragment Offset):该字段表示分片相对于原始IP报文开始处的偏移量,其实就是表示当前分片在原报文中所处的位置,第一个分片对应值为0。由于该字段总共13个比特位,因此最多可以表示2 ^ 13即8192个相对位置。单位为8字节,所以最大可以表示8192 * 8 = 65536个字节的位置。
  • (8位生存时间(Time To Live):数据报到达目的地的最大报文跳数(Hop,指网络中一个区间,IP数据包正是在网络中一个跳间被转发),一般为64,每次经过一个路由,TTL–,如果TTL == 0时还没到达目的地,那么这个报文就会被丢弃。这个字段主要是为了防止出现路由循环,数据包在一个循环中一直转发,浪费网络资源。
  • 8位协议(Protocol):表示IP的上层是什么协议,我们熟知的TCP、UDP、ICMP等都是在IP上层的。
  • 16位首部校验和(Header Checksum):使用CRC进行校验,鉴别IP首部是否收到损坏,如果损坏直接丢弃,它只校验IP头部,不校验下面的内容,因为内容部分的校验是上层传输层(TCP)需要考虑的,IP协议只要发现首部有问题就直接丢弃该报文。
  • 32位源IP地址(Source Address):表示发送端的IP。
  • 32位目的IP地址(Destination Address):表示接收端的IP。
  • 选项字段(Options):不定长,最大可以到40个字节。
IP地址

IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成

IP地址划分为五个级别,分别为A类、B类、C类、D类和E类(一直没有使用过),所以目前我们所能见到的IP地址只有A、B、C、D四类。划分的依据就是IP地址从第1位到第4位的比特位。

3.3传输层协议----TCP/UDP协议

UDP数据包格式

网络环境中

  • IP------定位一台主机
  • 16位端口Port------定位一台主机上的某个进程
  • 格式:IP:Port 比如:127.0.0.1:80【表示127.0.0.1这台主机上的第80号进程】

TCP协议

  • 16位源端口(进程)
  • 16位目的端口(进程)
  • 32位序号(Seq)【用来表示A发送给B的数据报序号】
  • 32位确认序号(Ack)【客户端和服务器端都可以发送,Ack=Seq+1】
  • 6个标志位【每个标志位1bit,分别是 URG、ACK、PSH、RST、SYN、FIN】
    • URG:紧急指针有效
    • ACK:确认序号有效
    • PSH:接收方应该尽快将这个报文交给应用层
    • PST:重置连接
    • SYN:建立一个连接
    • FIN:断开一个连接
  • 16位滑动窗口(表示缓存存储空间的大小)
    • 传输数据的双方,如果一边传输的快,一边接收的慢。那么数据接收方会告诉传输方,自己有一个缓存。传输方就会把数据放入缓存,当缓存满了,数据的传输方就会进入阻塞等待。

TCP协议

TCP协议中最重要的是理解连接时的三次握手和断开时的四次挥手

TCP的三次握手【重点】
  • 1.首先客户端发送连接请求【SYN】
  • 2.服务端接受连接后回复确认号【ACK报文】,此时并同样返回请求序号【Seq】,并且为这次连接分配资源【SYN+ACK】
  • 3.客户端接收到ACK报文后,也向服务端发送ACK报文,并且分配资源,这样TCP连接就成功了。【ACK】

**总结:**三次握手的关键是要确认对方收到了自己的数据包,这个目标就是通过“确认号(Ack)”字段实现的。计算机会记录下自己发送的数据包序号Seq,待收到对方的数据包后,检测“确认号(Ack)”字段,看Ack = Seq + 1是否成立,如果成立说明对方正确收到了自己的数据包`。

为什么需要三次握手?

  • 1、在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认【自己的收信能力和A的发信能力没有问题。】
  • 2、在第二次通信中,B向A发送信息之后,【A可以确认自己的发信能力、收信能力和B的收信能力没有问题,但是B不知道自己的发信能力到底如何,所以就需要第三次通信。】
  • 3、在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。
  • 小结:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
TCP四次挥手【重点】

​ 建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。

过程描述
A:“任务处理完毕,我希望断开连接。”
B:“哦,是吗?请稍等,我准备一下。”
等待片刻后……
B:“我准备好了,可以断开连接了。”
A:“好的,谢谢合作。”
  • 第一次挥手:Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。
  • 第三次挥手: Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次握手。

​ 数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

为什么是连接是三次握手,而关闭是四次握手?

  • 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
  • 但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了,我先准备一下就关闭”。
  • 只有等到我Server端所有的报文都发送完了【准备完毕】,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【网络编程】基础知识相关推荐

  1. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  2. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  3. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  4. python网络编程基础知识_python网络编程基础

    一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...

  5. 网络编程基础知识概括帮助你了解架框组成客户端服务端架构

    阅读目录 1.楔子 2.客户端/服务端架构 3.网络基础 4.套接字(socket)初使用 写python代码 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分 ...

  6. 11.网络编程-基础知识 C++/Linux-2022-10-20

    linux网络编程 1.网络基础 网络应用程序设计模式 C/S - client/sercver 优点:1.协议选用灵活,2.可以缓存数据 缺点:用户安全,开发工作量大,调试困难 B/S - brow ...

  7. 网络编程基础知识(待更新补充)

    1.C/S架构(client/server) 即客户端(泛指客户端程序exe)与服务端架构 2.B/S架构(Browser/Server) 浏览器端与服务器端架构 3.广播 主机之间'一对所有'的通讯 ...

  8. 网络编程 -- 基础知识 流(输入流,输出流)

    1. 流 流是指通过一定的传播路径从源传递到目的地的字节序列.Java中的字节流分为输入流和输出流:输出流是指向目的地的写入的二进制序列,输入流是从数据源读取的二进制序列.网络编程的很大一部分工作都是 ...

  9. 网络编程基础知识详解

    什么是网络编程 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据. ...

  10. socket通信需要网线连接吗_socket网络编程基础知识篇

    网络通信是一种进程间通信(IPC, Inter-Process Communication),要求位于不同网络节点不同进程的通信双方必须遵循统一的通信协议方可实现.基于套接字(Socket)通信是应用 ...

最新文章

  1. 域控制器安装完成没有_tcp_udp_Windows 安装 Jupyter Lab
  2. 最优化学习笔记(三)最速下降法
  3. Codeigniter的一些优秀实践
  4. java.lang.NoSuchFieldError: INSTANCE at org.apache.http.conn.ssl.SSLConnectionSocketFactory
  5. Python3.8.0中string与byte相互转换
  6. 土木工程与计算机专业考研学校排名,2017年土木工程专业考研大学排名
  7. SSH 与 SFTP
  8. 开源ONE兔3.0社交社区交友婚恋视频即时通讯双端APP原生源码
  9. oc实时渲染的图如何导出_VR批量渲染如何同时保存通道图?「渲云渲染」
  10. 动态规划之完全背包和多重背包
  11. [摘]研究方法 - 实证研究
  12. 苹果c语言怎么用windows。h_苹果12怎么用蓝牙传照片?iphone12无线传相片的详细步骤...
  13. 【Matlab】使用Matlab运行Windows命令行命令+实例
  14. react native (Error: Unable To Find Utility “Instruments“, Not A Developer Tool)
  15. 破解TP-Link路由-嗅探PPPoE拨号密码
  16. android view z总结的好帖子
  17. linux使用spotify/kafka 镜像docker部署 Kafka
  18. oracle 减少表空间,oracle减小数据库表空间
  19. 24点游戏实现-详细步骤
  20. 驾驶员困倦检测危险驾驶检测抽烟喝水打电话检测yolov5

热门文章

  1. ButterKnife黄油刀
  2. android 添加黄油刀,Android Butterknife 黄油刀的使用
  3. 取缔余额宝 是高估了余额宝还是低估了银行
  4. php强行横屏,android强制横屏apk下载
  5. 让一个人再次生机勃勃,还是内心的力量
  6. mysql 结构体的charset_MYSQL源码分析之结构体浅析
  7. 三大运营商都在总结5G商用3年有啥成果?谁更厉害?
  8. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的均值和中位数、指定na.rm参数配置删除缺失值
  9. 四自由度机械臂matlab建模与仿真
  10. sql没有足够的值_您还没有足够使用的4种高级SQL功能