TCP/IP协议简要介绍

news2024/11/25 4:27:35

TCP/IP for IP version 4(IPv4)是一种网络协议,Microsoft Windows使用该协议通过internet与其他计算机进行通信。理想情况下,只要基于Windows的计算机通过网络进行通信,就会使用TCP/IP。

本文介绍TCP/IP协议的组成、协议体系结构、TCP/IP的核心协议及应用程序接口。

1 TCP/IP协议体系结构

TCP/IP协议映射到一个称为DARPA模型的四层概念模型,该模型以最初开发TCP/IP的美国政府机构命名。DARPA模型的四个层次是:应用程序、传输、互联网和网络接口。DARPA模型中的每一层对应于七层开放系统互连(OSI)模型的一个或多个层。

下图显示了TCP/IP协议体系结构。

网络接口层(Network Interface Layer)

网络接口层(也称为网络访问层)负责将TCP/IP数据包放置在网络介质上和从网络介质接收TCP/IP数据包。TCP/IP被设计为独立于网络访问方法、帧格式和介质。通过这种方式,TCP/IP可以用于连接不同类型的网络。其中包括局域网(LAN)介质,如以太网和令牌环,以及广域网技术,如X.25和帧中继。与任何特定网络介质的独立性允许TCP/IP适应诸如异步传输模式(ATM)之类的新介质。

网络接口层包括OSI模型的数据链路层(Data-Link Layer)物理层(Physical Layer)。请注意,互联网(Internet Layer)没有利用网络接口层中可能存在的排序和确认服务。假设网络接口层不可靠,传输层(Transport Layer)的功能是通过会话建立、数据包的排序和确认进行可靠通信。

互联网层(Internet Layer)

Internet层处理寻址、打包和路由功能。互联网层的核心协议是IP、ARP、ICMP和IGMP。

  • 互联网协议(IP)是一种可路由的协议,用于处理IP寻址、路由以及数据包的分段和重组。
  • 地址解析协议(ARP)处理互联网层地址到网络接口层地址(例如硬件地址)的解析。
  • 互联网控制消息协议(ICMP)处理提供诊断功能和报告由于IP数据包传递失败而导致的错误。
  • 互联网组管理协议(IGMP)处理IP多播组成员的管理。

互联网层类似于OSI模型的网络层(Network Layer)。

传输层(Transport Layer)

传输层(也称为主机到主机传输层)负责为应用层( Application layer)提供会话和数据包通信服务。传输层的核心协议是传输控制协议(TCP)和用户数据报协议(UDP)。

TCP提供一对一、面向连接、可靠的通信服务。TCP处理TCP连接的建立、发送数据包的排序和确认,以及传输过程中丢失数据包的恢复。

UDP提供一对一或一对多、无连接、不可靠的通信服务。当要传输的数据量很小时(例如适合单个数据包的数据),当您不希望建立TCP连接的开销时,或者当应用程序或上层协议提供可靠的传输时,都会使用UDP。

TCP/IP传输层包含OSI传输层的职责。

应用层(Application Layer)

应用层允许应用程序访问其他层的服务,并定义应用程序用于交换数据的协议。有许多应用层协议,并且总是在开发新的协议。

最广为人知的应用层协议是那些用于交换用户信息的协议:

  • 超文本传输协议(HTTP)用于传输构成万维网网页的文件。
  • 文件传输协议(FTP)用于交互式文件传输。
  • 简单邮件传输协议(SMTP)用于传输邮件和附件。
  • Telnet是一种终端仿真协议,用于远程登录到网络主机。

此外,以下应用层协议有助于促进TCP/IP网络的使用和管理:

  • 域名系统(DNS)用于将主机名解析为IP地址。
  • 路由信息协议(RIP)是路由器用于在IP互联网上交换路由信息的路由协议。
  • 简单网络管理协议(SNMP)用于网络管理控制台和网络设备(路由器、网桥、智能集线器)之间,以收集和交换网络管理信息。

TCP/IP应用程序的应用层接口示例有Windows Sockets和NetBIOS。Windows Sockets在Windows Server 2003下提供了一个标准的应用程序编程接口(API)。NetBIOS是用于访问协议服务(如会话、数据报和名称解析)的行业标准接口。

TCP/IP应用层包括OSI会话、表示和应用层的职责。

2 TCP/IP核心协议

安装在网络操作系统中的TCP/IP协议组件是一系列相互连接的协议,称为TCP/IP的核心协议。TCP/IP协议套件中的所有其他应用程序和其他协议都依赖于以下协议提供的基本服务:IP、ARP、ICMP、IGMP、TCP和UDP。

IP

IP是一种无连接、不可靠的数据报协议,主要负责主机之间的数据包寻址和路由。无连接意味着在交换数据之前不建立会话。不可靠意味着不能保证交货。IP总是尽“最大努力”传递数据包。IP数据包可能丢失、传送顺序错误、重复或延迟。IP不会尝试从这些类型的错误中恢复。对传送的数据包的确认和丢失数据包的恢复是更高层协议(如TCP)的责任。在RFC 791中定义了IP。

ARP

当IP数据包通过共享访问发送时,基于广播的网络媒体(如以太网或令牌环)必须解析与转发IP地址对应的媒体访问控制(MAC)地址。ARP使用MAC级别的广播将已知的转发或下一跳IP地址解析为其MAC地址。ARP是在RFC 826中定义的。

ICMP

Internet控制消息协议(ICMP)为无法传递的数据包提供故障排除功能和错误报告。例如,如果IP无法将数据包传递到目标主机,ICMP会向源主机发送一条destination Unreachable消息。

IGMP

互联网组管理协议(IGMP)是一种管理网段上IP多播组中主机成员资格的协议。IP多播组,也称为主机组,是一组主机,用于侦听指定IP多播地址的IP流量。IP多播流量被发送到单个MAC地址,但由多个IP主机处理。特定主机侦听特定的IP多播地址,并接收到该IP地址的所有数据包。

以下是IP多播的一些附加方面:

  • 主机组成员身份是动态的,主机可以随时加入和离开该组。
  • 主机组可以是任何大小。
  • 主机组的成员可以跨越多个网络的IP路由器。这种情况需要IP路由器上的IP多播支持,以及主机向本地路由器注册其组成员资格的能力。主机注册是使用IGMP完成的。
  • 主机可以向IP多播地址发送流量,而不属于相应的主机组。

对于要接收IP多播的主机,应用程序必须通知IP它将在指定的IP多播地址接收多播。如果网络技术支持基于硬件的多播,则网络接口被告知放弃特定IP多播地址的数据包。在以太网的情况下,网络适配器被编程为响应于与指定的IP多播地址相对应的多播MAC地址。

主机支持以下级别之一的IP多播:

  • 级别0:不支持发送或接收IP多播流量。
  • 级别1:支持发送但不接收IP多播流量。
  • 级别2:支持发送和接收IP多播流量。Windows Server 2003、Windows 2000、Microsoft Windows NT 3.5版及更高版本,以及TCP/IP支持级别2的IP多播。

注册主机组信息的协议是IGMP,这在所有支持2级IP多播的主机上都是必需的。IGMP数据包使用IP报头发送。

IGMP消息有三种形式。

  • 主机成员报告。当主机加入主机组时,它将IGMP主机成员身份报告消息发送到所有主机IP多播地址(224.0.0.1)或指定的IP多播位置,通过引用IP多播地点来声明其在特定主机组中的成员身份。主机还可以指定需要多播流量的特定来源。
  • 主机成员身份查询。当路由器轮询网络以确保存在特定主机组的成员时,它会向所有主机的IP多播地址发送IGMP主机成员身份查询消息。如果在几次轮询之后没有接收到对轮询的响应,则路由器假定该网络在该组中没有成员资格,并停止向其他路由器通告该多播组信息。
  • 集体休假。当主机不再对接收发送到特定IP多播地址的多播流量感兴趣,并且它发送了最后一个IGMP主机成员身份报告消息以响应IGMP主机会员身份查询时,它向特定IP多点播地址发送IGMP组离开消息。本地路由器验证发送IGMP Group Leave消息的主机是否是该子网上该多播地址的最后一个组成员。如果在多次轮询之后没有收到对轮询的响应,则路由器假定该子网在该组中没有成员资格,并停止向其他路由器通告该多播组信息。

对于跨互联网路由器的IP多播,路由器使用多播路由协议来传递主机组信息,以便每个支持多播转发的路由器都知道哪些网络包含哪些主机组的成员。IGMP是在RFC 1112和2236中定义的。

TCP(传输控制协议)

TCP是一种可靠的、面向连接的传递服务。数据是分段传输的。面向连接意味着必须先建立连接,然后主机才能交换数据。可靠性是通过为传输的每个段分配一个序列号来实现的。确认用于验证是否接收到数据。对于发送的每个段,接收主机必须在指定的时间段内返回接收字节的确认(ACK)。如果没有接收到ACK,则重新发送数据。TCP是在RFC 793中定义的。

TCP使用字节流通信,其中TCP段内的数据被视为没有记录或字段边界的字节序列。

TCP端口

TCP端口为TCP段的传递提供了一个特定的位置。1024以下的端口号是众所周知的端口,由互联网号码分配机构(IANA)分配。下表列出了一些众所周知的TCP端口。

TCP三方握手

TCP连接是通过三方握手初始化的。三方握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小或使用大窗口大小或TCP时间戳。以下步骤概述了该过程:

  1. TCP连接的发起方(通常是客户端)向服务器发送TCP段,其中包含连接的初始序列号和指示客户端上用于存储来自服务器的传入段的缓冲区大小的窗口大小。
  2. TCP连接的响应方(通常是服务器)发回一个TCP段,该段包含其选择的初始序列号、对客户端序列号的确认以及指示服务器上用于存储来自客户端的传入段的缓冲区大小的窗口大小。
  3. 发起方向服务器发送一个TCP段,其中包含对服务器序列号的确认。

TCP使用类似的握手过程来结束连接。这保证了两个主机都已完成传输,并且已接收到所有数据。

UDP

UDP提供了一种无连接的数据报服务,它提供了不可靠的、尽最大努力传递消息中传输的数据。这意味着既不能保证数据报的到达,也不能保证所传递的数据包的正确排序。UDP不会通过重新传输从丢失的数据中恢复。UDP是在RFC 768中定义的。

UDP由不需要确认数据接收并且通常一次传输少量数据的应用程序使用。NetBIOS名称服务、NetBIOS数据报服务和SNMP是使用UDP的服务和应用程序的示例。

3 TCP/IP应用程序接口

对于以标准方式访问TCP/IP 核心协议提供的服务的应用程序,Windows Server 2003等网络操作系统提供了行业标准的应用程序编程接口(API)。API是由应用程序代码以编程方式调用以执行网络功能的函数和命令集。例如,连接到网站的Web浏览器应用程序需要访问TCP的连接建立服务。

 Windows Sockets接口

Windows Sockets API是Windows Server 2003下的标准API,用于使用TCP和UDP的应用程序。写入Windows Sockets API的应用程序在许多版本的TCP/IP上运行。TCP/IP实用程序和SNMP服务是写入Windows Sockets接口的应用程序示例。

Windows Sockets提供的服务允许应用程序绑定到主机上的特定端口和IP地址,启动和接受连接,发送和接收数据,以及关闭连接。Sockets有两种类型:

  • 流Sockets使用TCP提供双向、可靠、有序和不重复的数据流。
  • 数据包Sockets使用UDP提供单向或双向数据流。

Sockets是由主机上的协议和地址定义的。地址的格式特定于每个协议。在TCP/IP中,地址是IP地址和端口的组合。两个Sockets(连接的每一端一个)形成双向通信路径。

要进行通信,应用程序指定协议、目标主机的IP地址和目标应用程序的端口。连接应用程序后,可以发送和接收信息。

NetBIOS接口

NetBIOS允许应用程序通过网络进行通信。NetBIOS定义了两个实体,一个会话级接口和一个会话管理和数据传输协议。

NetBIOS接口是用户应用程序向底层网络协议软件提交网络输入/输出(I/O)和控制指令的标准API。使用NetBIOS接口API进行网络通信的应用程序可以在支持NetBIOS接口的任何协议软件上运行。

NetBIOS还定义了一个在会话/传输级别起作用的协议。这是由底层协议软件(如NetBIOS帧协议NBFP——NetBEUI或TCP/IP上的NetBIOS(NetBT)的一个组件)实现的,它执行适应NetBIOS接口命令集所需的网络I/O。在RFC1001和1002中定义了TCP/IP上的NetBIOS。默认情况下启用NetBT,但是Windows Server 2003允许您在不包含基于NetBIOS的网络客户端或应用程序的环境中禁用NetBT。

NetBIOS为NetBIOS名称管理、NetBIOS数据报和NetBIOS会话提供命令和支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2双层循环生成动态ref,并跳转到组件内的指定位置

话不用多说,先上一个视频,看看是不是你们需要的效果 vue2双层循环生成动态ref,并跳转到组件内的指定位置 <div class"menu-content" ref"menu"><el-collapse v-model"activeNames"><el-collapse-item style"padding: 10px;…

Java每日作业day6.18

ok了家人们今天我们继续学习方法的更多使用&#xff0c;闲话少叙&#xff0c;我们来看今天学了什么 1.重载 在同一个类中&#xff0c;可不可以存在同名的方法&#xff1f;重载:在同一个类中&#xff0c;定义了多个同名的方法&#xff0c;但每个方法具有不同的参数类型或参数个…

传统车牌识别

主要参考&#xff1a;https://blog.csdn.net/qq_40784418/article/details/105586644 其它介绍&#xff1a; https://blog.csdn.net/great_yzl/article/details/120127962 https://blog.csdn.net/onepunch_k/article/details/115480904 cv2.matchTemplate https://docs.ope…

三星SAINT-D技术引领HBM内存堆叠革命

三星电子即将在今年推出一项革命性技术&#xff0c;允许在CPU或GPU上堆叠高带宽内存&#xff08;HBM&#xff09;&#xff0c;根据韩国经济日报的报道&#xff0c;这一消息在圣何塞举办的三星晶圆代工论坛2024上公布&#xff0c;并得到业内消息人士证实。这项3D封装技术为2025年…

ESP32蓝牙BLE连接米家温湿度计

ESP32蓝牙BLE连接米家温湿度计 文章目录 ESP32蓝牙BLE连接米家温湿度计简介需要准备的东西软件调试代码实现修改查找的名称 修改需要连接的服务和属性添加解析数据的代码 上电演示提示 简介 最近在学习低功耗蓝牙BLE(Bluetooth Low Energy)&#xff0c;刚好手里有个米家蓝牙温…

总结一下 C# 如何自定义特性 Attribute 并进行应用

前言 Attribute&#xff08;特性&#xff09;是一种用于为程序元素&#xff08;如类、方法、属性等&#xff09;提供元数据信息的方法。 特性是一种声明式的信息&#xff0c;附加到程序元素上&#xff0c;提供额外的数据用于描述和控制这些元素的行为。 在编译和运行时&…

WMS系统调拨盘点功能:优化仓储管理效率

一、调拨功能概述 WMS系统的调拨功能是指仓库内部或者不同仓库之间对商品进行转移的过程。调拨的目的在于平衡库存、优化存储空间和提高物流效率。调拨功能主要包括以下几个方面&#xff1a; 1. 调拨申请&#xff1a;根据业务需求&#xff0c;仓库管理员可以发起调拨申请&…

软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码

&#xff08;接上文《软件设计不是CRUD&#xff08;22&#xff09;&#xff1a;在流式数据处理系统中进行业务抽象落地——设计思考》&#xff09; 4、详细设计 项目开发初期&#xff0c;有两种测速雷达和对应的摄像头需要接入&#xff0c;分别是STC500型测速雷达和TTS400型测…

《UNIX环境高级编程》第三版(电子工业出版社出品)——两年磨一剑的匠心译作

历时两年&#xff0c;《UNIX环境高级编程》的翻译工作终于落下帷幕。这一路走来&#xff0c;真可谓是如鱼饮水&#xff0c;冷暖自知。还记得最初看到招募译者消息的那一刻&#xff0c;内心的激动难以言表。我毫不犹豫地报名&#xff0c;而后经历了试译、海选等激烈的角逐&#…

TestProject Python SDK入门

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…

怎么提取视频中的音频?别错过这6个音频提取方法了!(全新)

您是否曾经发现过一个音乐很棒的视频&#xff0c;并想从视频中提取音频&#xff1f;如今&#xff0c;关于提取mp4视频中的音频需求越来越常见。例如&#xff0c;您可能想从mp4格式的电影中提取音频&#xff0c;将音乐用作手机铃声&#xff0c;或在自己的视频项目中使用视频中的…

C#唯一进程的处理Winform/WPF

C#唯一进程的处理 1.使用进程&#xff08;Process&#xff09;判断winformWPF执行效果&#xff1a; 2.使用互斥体&#xff08;Metux&#xff09;实现winformWPF实现效果&#xff1a; 在C#客户端&#xff08;Winform/WPF&#xff09;开发过程中&#xff0c;有的情况需要确保程序…

零基础入门学用Arduino 第四部分(一)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载&#xff0c;如下图 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c;xp需要下载2015之前的 点击链接Microsoft Visual C Redistributable官方版本…

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)

&#x1f375;茶艺师服务小程序&#xff1a;品味生活的茶艺新体验&#x1f331; &#x1f33f;一、引言&#xff1a;茶艺师服务小程序&#xff0c;让生活更有味 在繁忙的生活中&#xff0c;品一杯香茗&#xff0c;感受茶文化的韵味&#xff0c;是许多人向往的休闲方式。然而&…

Android开发系列(四)Jetpack Compose之Button

在Jetpack Compose中&#xff0c;Button是一个常用的用户界面组件&#xff0c;用于执行某些操作或触发某些事件。Button控件是可触摸的&#xff0c;并且通常会显示一个文本或图标来表示其功能。 要在Jetpack Compose中创建一个Button&#xff0c;可以使用Button()函数&#xf…

C#——正则表达式详情

正则表达式 正则表达式: 列如判断一个字符串是不是手机号&#xff0c;或者密码是否包含大小写数字等这些要求&#xff0c;可以把这些条件写成一个表达式 创建正则表达式 string s1 "1234adsab1KHGFJD"; // 创建正则时需要在字符串前面加上 Regex r new Regex(&q…

序列化与反序列化漏洞实例

实验环境&#xff1a; 本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目&#xff0c;我使用phpstudy集成环境将其测试环境搭建在了本地&#xff0c;如下。涉及的几个页面php为&#xff1a; index.php function.php myclass.php index.php : <?php // inde…

【Redis】java客户端(SpringData和jedis)

https://www.oz6.cn/articles/58 https://www.bilibili.com/video/BV1cr4y1671t/?p16 redis官网客户端介绍&#xff1a;https://redis.io/docs/latest/develop/connect/clients/ jedis maven引入依赖 <dependencies><!--引入Jedis依赖--><dependency><…

统计学一(术语,正态)

目录 一&#xff0c;常用术语 二&#xff0c;正态分布&#xff08;Normal Distribution&#xff09; 三&#xff0c;中心极限定理(Central Limit Theorem) 一&#xff0c;常用术语 population(族群)&#xff1a;要统计的总的 populationSize(族群数量)&#xff1a;要统计的总…