avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • python
  • 大模型应用
  • 软件/工具导航页
  • 关于
Home 编程基础--tcp/ip协议(1)
文章

编程基础--tcp/ip协议(1)

Posted 2020-08-31 Updated 2024-12- 10
By Administrator
7~9 min read

互联网通讯的多个协议,他们之间不互影响。通过组合成为了计算机间通讯的基础。


osi 5层协议

1036857-20200415215541847-564448301

1. 物理层

将电脑通过硬件连接起来,主要传输1、0信号

2. 数据链路层

  • 以太网协议

    物理层单独的0、1是没有任何意义的,在链路层以太网协议规定,每组数据为一帧(frame),每一帧分成两个部分:标头(Head)和数据(Data)。

    "标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

    "标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送

  • MAC地址

    在以太网协议的表头中,发送者及接受者的标识即网卡的MAC地址。每块网卡都有唯一的一个MAC地址

  • 广播

    表头通过arp可以知道对方的MAC地址,在以太网中,如果要给另外一台计算机发送信息,那么这台计算机会给所有的计算机发送消息,接受到消息的计算机会读取以太网协议中的标头,如果MAC地址和自己一样则接受,如果不一样则丢弃这个包。

3. 网络层

当电脑在不同的子网时,不能直接通过MAC地址确定目标。网络层也包括标头、数据,同时这两部分也组成了以太网协议的数据部分。

  • IP协议

    作用:1. 为计算机分配地址 2:通过ip与子网掩码的and运算,计算目标ip是否与自身在一个网段。如果目标地址不再一个子网中,那么会通过网关发送

  • IP数据包

    标头主要包括:版本、长度、IP地址等信息。

    数据部分最多可以达到65535个字节,不过超过以太网协议的长度,就会以多个以太网包进行发送。

  • ARP协议

    在正常情况下目标主机的IP地址是已知的,如果是在局域网内,发送主机为了知道对方MAC地址,发送主机会携带自身ip和目标ip进行广播,目标主机接受到后,会返回自己的mac地址。

4. 传输层

通过MAC和IP地址,可以实现任意两台机器的通信。一个机器上一般都有多个程序在通讯,为了确定通讯的应用程序,需要用端口进行区分,通常把 “地址+端口”称为套接字。传输层中的表头定义了,发出端口和接受端口。数据最大长度为65535.

  • udp协议

    "标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。

  • tcp协议

    tcp协议类似于有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

5. 应用层

TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。即传输层的数据部分。

其他:

  1. 广播风暴:局域网内发送的信息过多影响到其他计算机通讯

  2. ARP攻击:

如果在网络中有计算机存在ARP病毒,那么会病毒会通过伪造ip和mac地址,利用ARP协议中的漏洞,截获局域网内,发现其他计算机的数据。

基本形式:

  1. 中间人攻击

    截获两台计算机的通讯,然后再进行转发到目标计算机

  2. 克隆攻击

    获取到目标计算机的MAC地址和ip地址,然后通过其他方式攻击目标计算机,使其不能对外提供服务。然后将自己的ip和MAC地址修改为目标计算机的

二层交换机 一层交换机

python
python
License:  CC BY 4.0
Share

Further Reading

May 27, 2025

python中一些很好用的工具类模块

contextlib 此模块为 with 语句提供了一些工具,简化了 with的使用。 @contextlib.contextmanager 它将一个生成器函数转换为一个上下文管理器。而无需创建一个类或单独的 __enter__() 和 __e

Apr 21, 2025

Typing

类型注释让python 有了更好的编辑器提示功能。 基础使用 对函数参数和返回值,进行类型注释 def surface_area_of_cube(edge_length: float) -> str:    return f"The surface area of the cube is {6 *

Feb 25, 2025

python多进程多线程下的计数及日志打印

注意点: 需要保证在多进程内的进程锁是同一个 需要保证在单进程中的多线程内线程锁是同一个 # logger.py import multiprocessing import threading ​ ​ class Logger_test:    def __init__(self, process

OLDER

python基础-类、对象、元类

NEWER

编程基础--tcp/ip协议(2)

Recently Updated

  • Gemini 使用过程中的一些坑
  • python中一些很好用的工具类模块
  • 常用的uml类图及其表示方法
  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发 及配置优化

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy