网络编程学习

网络编程学习

OSI模型和网际协议族的各层

在这里插入图片描述
1 为什么套接字提供的是从OSI模型的顶上三层进入传输层的接口?

  1. 顶上三层处理具体网络应用(如FTP、Telnet或HTTP)的所有细节,却对通信细节了解很少;底下四层对具体网络应用了解不多,却处理所有的通信细节:发送数据,等待确认,给无序到达的数据排序,计算并验证校验和,等等。
  2. 顶上三层通常构成所谓的用户进程(user process),底下四层却通常作为操作系统内核的一部分提供。

TCP/IP 基础

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
在这里插入图片描述

1. 数据链路层

作用:数据层则是解决物理地址寻址的问题。

  • 数据帧格式

    以太网协议定义了数据帧,每一帧传输一段数据,如果数据很长,则需要分帧传输。每一个数据帧分为两个部分,head和data(TCP、IP协议也是分为两部分)。
    在这里插入图片描述

  • Head部分:包含了发送者(MAC地址)、接收者、数据类型等等;头部固定为18字节。

  • Data部分:包含了传输的具体数据。Data部分最少46字节,最长1500字节。如果数据很长,则会分为几个数据帧传输,接收方接收后再进行整合获取数据。

数据帧传送方式

广播,以太网中发送数据的方式称为广播。把数据发送到网络内的总线上,网络内的所有计算机都可以拿到,拿到之后,拆开一看,目标MAC地址不是自身,就丢弃了;目标MAC地址是自身,就收下这个数据包并解析。

2. 网络层

作用:定义了另一种地址,用来定义计算机所在的自网络,就像你所在的市区,就是一个范围。
Head部分20-60字节 ,整个IP数据包最大为65535字节(2^16)。

原理:
通过子网掩码确定在同一子网,然后再去广播。

如何获取mac地址:
通过ip获取mac地址:ARP协议

方式:
两台主机在同一个子网
可以使用ARP协议,ARP协议发送一个数据包,与IP协议相似,包含于以太数据包中。其中包含了本机IP地址,本机MAC地址目标IP地址,目标MAC地址由于不知道,写的是FF:FF:FF:FF:FF:FF,用来表示这是个广播地址,子网中的计算机都会拿到这个包,然后和自己的IP比较,如果相同,就知道这是个想要我MAC地址的的请求,把自己MAC地址回复。

3. 传输层

作用:提供端口,通过端口确定是哪个应用程序。
UDP的Head部分8个字节,总长65535字节,正好可以放进一个IP数据包。

TCP协议
tcp三次握手,四次挥手。
在这里插入图片描述
保证可靠传输会用到序列号(seq),确认号(ack),SYN,ACK,FIN
序列号:程序用来标识数据包所用的字段
确认号(ack):用来表示对收到的数据包表示确认收到,上次收到的是哪个序号。期待的接收到的下一个序列号。
SYN:程序请求建立连接的字段
ACK:确认位,确认收到对方发来的数据
FIN:程序请求关闭连接的字段

三次握手
主机A,主机B

1.A→B seq=x,SYN=1 主机A请求建立连接

2.B→A seq=y,ACK=1,SYN=1,ack=x+1 ACK表示B确认收到A的请求,SYN表示同意建立连接 (注:这一步后,A确认了自己的发报和收报能力,因为发出去的数据有应答,就说明B已经收到了)

3.A→B seq=x+1,ACK=1,ack=y+1 ACK表示确认B的请求 (注:这一步后,B才最终确认自己的发报能力,因为2发给A的有应答)

3次握手后,表示这个链接是好的,才建立连接,发送数据。

四次挥手

1.A→B seq=x,FIN=1 A主机的数据发送完了,所以A发送FIN,发起了断开连接的请求
2.B→A seq=y,ACK=1,ack=x+1 ACK确认收到了A的数据,但是B的数据还没有传完,所以需要等B把数据包传完之后才断开连接
(注:这一步之后,B接着传输剩下的数据包)
3.B→A FIN=1,ACK=1,seq=z,ack=x+1 B的数据传完了,所以也发送FIN表示可以断开连接
(注:这一步之后,B直接断开连接)
4.A→B ACK=1,seq=x+1,ack=z+1 A表示收到了B的数据,可以断开连接
(注:这一步之后,A等待B的应答,经过2MSL之后,还没有收到B的回信,因为B已经关闭连接了,所以A确定B已经断开了,A也断开连接。2MSL为报文在网络上最大生存时间,超过这个时间就会被丢弃)。

为什么要三次握手?
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

原文链接:https://blog.csdn.net/lengxiao1993/article/details/82771768
为什么有TIME-WAIT?
1)可靠地实现TCP全双工连接的终止。
2)允许老的重复分节在网络中消逝。

为什么是2MSL?
MSL是任何IP数据报在因特网中可以存活的最大时间。
A并不知道B是否接到自己的ACK,A是这么想的:
1)如果B没有收到自己的ACK,会超时重传FiN那么A再次接到重传的FIN,会再次发送ACK
2)如果B收到自己的ACK,也不会再发任何消息,包括ACK

无论是1还是2,A都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是:
去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。

4.应用层

作用:制定了数据格式,用于对数据的封装与解读。

传输层能够保护的最大数据量:1472

1、链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum
Transmission Unit)为1500;  
2、网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480; 
3、传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;

5.传输过程

现在我们需要的数据都已经准备好了,可以开始数据传输了。

这时传输并不是精确将数据投递到目标机器,传输是以广播的形式,将数据包广播给子网内的所有机器,然后接收的设备取出数据包中接收端mac地址来喝自身的mac对比,如果不一致就讲数据丢弃。如果mac地址对比一致的话才能继续处理。

如果目标机器和发送主机在一个子网的话通过这个步骤是可以将数据发送到目标地址的。但是如果两者不再一个子网中,就需要网关的参与了,这时候目标地址的mac地址其实是网关的mac地址。

而且在请求的时候可能会通过多个网关才能将数据发送到目标地址上。

6.IP地址和mac地址

  1. 有了MAC地址为什么还需要IP地址?
    由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要是这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但统一的IP地址把这个复杂问题解决了。连接到因特网的主机只需拥有统一的IP地址,它们之间的通信就像连接在同一个网络(虚拟互连网络或者简称IP网)上那么简单方便,因为调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。

  2. 有了IP地址为什么还需要MAC地址?
    a.信息传递时候,需要知道的其实是两个地址:终点地址、下一跳的地址。IP地址本质上是终点地址,它在跳过路由器的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。
    b.网络体系结构的分层模型:用MAC地址和IP地址两个地址,用于分别表示物理地址和逻辑地址是有好处的。这样分层可以使网络层与数据链路层的协议更灵活地替换。
    c.历史原因:早期的以太网只有集线器,没有交换机,所以发出去的包能被以太网内的所有机器监听到,因此要附带上MAC地址,每个机器只需要接受与自己MAC地址相匹配的包。

原文链接:https://blog.csdn.net/John_62/article/details/68489417

http协议

超文本传输协议。

1. 简介

什么是超文本?
文本:在互联网早期的时候只是简单的字符文字,但现在已经可以扩展为图片、视频、压缩包等。
超文本:超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。

举例:
HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。

HTML
HTML 称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说明文字,图形、动画、声音、表格、链接等。

URL
全称是(Uniform Resource Locator),中文名称是统一资源定位符,也就是我们俗称的网址。HTTP为80,HTTPS为443,此2个可省略,其他端口需要写上。

2.HTTP 请求特征

  1. cs模式,支持客户-服务器模式
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

3.详解 HTTP 报文

  1. HTTP 协议主要由三大部分组成:

1)起始行(start line):描述请求或响应的基本信息;
2)头部字段(header):使用 key-value 形式更详细地说明报文;起始行和头部字段并成为 请求头或者响应头,统称为 Header。
3)消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。消息正文也叫做实体,称为 body。

HTTP 协议规定每次发送的报文必须要有 Header,但是可以没有 body,也就是说头信息是必须的,实体信息可以没有而且在 header 和 body 之间必须要有一个空行(CRLF)
在这里插入图片描述
2. 常见请求方法
我们一般最常用的方法也就是 GET 方法和 POST 方法,其他方法暂时了解即可。
1)GET 获取资源,GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;

2)POST 传输实体,虽然 GET 方法也可以传输主体信息,但是便于区分,我们一般不用 GET 传输实体信息,反而使用 POST 传输实体信息,

3)PUT 传输文件,PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。但是,鉴于 HTTP 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此用的比较少。

3.HTTP请求头

HTTP请求头是在HTTP请求中包含的一组键值对,用于向服务器传递附加信息。它位于请求的第一行和请求体之间,以一行一对键值对的形式出现。

  • 请求头的作用
    请求头可以传递各种信息,包括客户端的身份、所需的资源类型、请求的语言偏好等。服务器可以根据这些信息做出相应的处理和响应。

分类:

  • 通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。
  • 请求头标:允许客户端传递关于自身的信息和希望的响应形式。
  • 响应头标:服务器和于传递自身信息的响应。
  • 实体头标:定义被传送资源的信息。即可用于请求,也可用于响应。

请求头

Accept:浏览器通过这个头,告诉服务器它所支持的数据类型 Accept-Charset:浏览器通过这个头,告诉服务器它采用的字符集
Accept-Encoding:浏览器通过这个头,告诉服务器,它所支持的压缩格式
Accept-Language:浏览器通过这个头,告诉服务器,它所采用的语言 Host:浏览器通过这个头,告诉服务器,我想访问服务器哪台主机
If-Modified-Since:浏览器通过这个头,告诉服务器,它缓存数据时间是多少。
Referer:浏览器通过这个头,告诉服务器,我是从哪个网页点过来的(防盗链)

Connection:连接方式

HTTP响应头

Location:这个头通常配合302状态码使用,它用于告诉浏览器你去找谁。 Server:告诉浏览器,服务器的类型
Content-Encoding: 服务器通过这个头,告诉浏览器,回送的数据采用的压缩格式。 Content-Length: 返回数据的长度
Content-Language: 返回数据的语言 Content-Type:这个头用于告诉浏览器,回送数据的类型
Last-Modified:这个头用于告诉浏览器,数据的最后修改时间 Refresh: :这个头用于控制浏览器定时刷新
Content-Disposition: 用于通知浏览器,以下载方式打开回送的数据 Transfer-Encoding:
用于通知浏览器,数据是以分块形式回送的 ETag: 缓存相头的头 Expires:
用于说明网页的失效时间,如果该值为一个<0的值,则服务器是通知浏览器不要缓存 Cache-Control: no-cache
通知浏览器不要缓存。

常见请求头详解
1)User-Agent
User-Agent请求头用于标识客户端的软件和版本信息。服务器可以根据User-Agent来适配不同的设备和浏览器,提供更好的用户体验。

2)Accept-Language
Accept-Language请求头用于告知服务器客户端的语言偏好,服务器可以根据这个信息返回对应语言的内容。

3)Referer
Referer请求头用于告知服务器请求的来源页面,服务器可以根据这个信息做一些特定的处理,比如统计访问来源等

4)Content-Type
Content-Type请求头用于指定请求体的数据类型,常见的有application/json、application/x-www-form-urlencoded等。

5)Authorization
Authorization请求头用于携带身份验证信息,常见的有Bearer Token、Basic Authentication等。

6)Cache-Control:指定请求和响应遵循的缓存机制。no-cache、max-age(资源被视为新鲜的最长时间) 。
Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接),keep-alive、close。
Content-Length:请求的消息长度。

  • 响应格式

在这里插入图片描述

1)状态码表示意思:
在这里插入图片描述
在这里插入图片描述

4. 摘要认证

可看链接https://blog.csdn.net/LZHH_2008/article/details/127266312

5. 和https区别

http是一个简单的请求-响应协议,特点是无状态和明文传输、而https,实际上是http加上SSL协议组合形成的一种加密传输协议。

ssl介绍:
https://blog.csdn.net/qq_38265137/article/details/90112705?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169554136016800226591877%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169554136016800226591877&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-90112705-null-null.142v94control&utm_term=SSL&spm=1018.2226.3001.4187

wireshark抓包使用

Packet Details Pane(数据包详细信息),每一层表示意思。
(1)Frame: 物理层的数据帧概况
(2)Ethernet II: 数据链路层以太网帧头部信息
(3)Internet Protocol Version 4: 互联网层IP包头部信息
(4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
(5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议。

过滤器使用:

  1. ip过滤
    ip.src == 192.168.1.104 显示源地址为192.168.1.104的数据包列表
    ip.dst ==192.168.1.104, 显示目标地址为192.168.1.104的数据包列表
    ip.addr == 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表。

  2. 端口过滤
    tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。
    tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。
    tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。

  3. 协议过滤
    直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。
    tcp,只显示TCP协议的数据包列表
    http,只查看HTTP协议的数据包列表
    icmp,只显示ICMP协议的数据包列表

  4. Http模式过滤
    http.request.method==“GET”, 只显示HTTP GET方法的。

  5. 逻辑运算符为 and/or/not
    过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp

  6. 按照数据包内容过滤。假设我要以IMCP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。如下
    在这里插入图片描述
    在这里插入图片描述

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值