TCP/IP协议

TCP/IP协议

TCP/IP协议概述

TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 链路接口层:接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

TCP/IP层次结构图 .png

网络层协议(IP协议)

IP协议是网络层的主要协议,是Internet最重要的协议。在IP协议中规定了在Internet上进行通信时应遵守的规则。例如IP数据包的组成、路由器如何将IP数据包送到目的主机等。IP协议在主机和网络之间寻址和路由数据包。IP是一个无连接的协议,主要负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递。另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层——TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 IP协议的数据格式如下:

网际协议IP数据格式.png

版本号:协议的版本号,不同版本的协议格式或语言可能不同,现在常用的是IPV4。 生存时间(Time To Live,TTL):8bit,即IP分组在IP网络中的寿命。 协议(Protocol):8bit,指明IP分组中数据字段携带的是哪种高层协议的数据。 首部检查和(header checksum):16bit。此字段只用于检查IP分组的首部,不包括数据字段。 源IP地址(source IP address):32bit,填入源主机的IP地址。 目标IP地址(destination IP address):32bit,填入目标主机的IP地址。 可选字段(IP options):可选,可变长,1字节-40字节,但加上填充字段(填充0)后两个字段长度必须为4Bytes的整数倍。 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的:网络号和主机号。其中网络号标识一个物理的网络,同一个网络上所有主机需要同一个网络号,该号在互联网中是唯一的;而主机号确定网络中的一个工作端、服务器、路由器及其它TCP/IP客户端。对于同一个网络号来说,主机号是唯一的。每个TCP/IP主机由一个逻辑IP地址确定。

传输层协议(TCP和UDP)

1.TCP协议 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议,由IETF的RFC 793说明。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据段损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。TCP端口为信息的传送指定端口,端口号小于256的定义为常用端口。 下图展示了TCP首部的数据格式。如果不计任选(Options)字段,那么,它的大小是20个字节。

TCP包头格式.png

TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如下图所示。 (1)客户机向服务器发送一个TCP数据包,表示请求建立连接。 (2)服务器收到了数据包,知道这是一个建立请求的连接,服务器也通过发回具有以下项目的数据包表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。 (3)客户机收到了服务器的TCP,知道是从服务器来的确认信息。于是客户机也向服务器发送确认信息。至此客户端完成连接。 (4)服务器收到确认信息,也完成连接。

TCP建立连接(三次握手) .png

TCP协议建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

TCP断开连接 .png

2.UDP协议 UDP 是User Datagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 用户数据报协议UDP提供了无连接的数据报服务。它适用于无须应答并且通常一次只传送少量数据的应用软件。

Socket编程

Socket简介

Socket接口是TCP/IP网络的API。Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学习Internet上的TCP/IP网络编程,必须理解Socket接口。    Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Socket创建

为了创建Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:

ServerSocket serverSocket = null;
     int port = 8080;
     try {
     //服务器套接字对象
     serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
     } catch (IOException e) {
     e.printStackTrace();
     System.exit(1);
     } 

Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。 两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

Socket配置

通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用 bind函数来配置本地信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

快速理解网络通信协议

18020
来自专栏即时通讯技术

网络编程懒人入门(六):深入浅出,全面理解HTTP协议

HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这...

22540
来自专栏任浩强的运维生涯

优化内核参数提高服务器的并发处理能力

PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题。要提高Linux系统下的负载能力,可以使...

53380
来自专栏xcywt

网络编程的一些理论

参考自《VC++深入详解》   这是我在看书时记录下来的东西。  注:下面的Socket其实都应该是socket 第14章网络编程 Socket是连接应用程序与...

25450
来自专栏玄魂工作室

Python灰帽编程 3.1 ARP欺骗

ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监...

45760
来自专栏轮子工厂

这真的是你了解的网络吗?

无论是 C/S 开发还是 B/S 开发,无论是前端开发还是后台开发,网络总是无法避免的,数据如何传输,如何保证正确性和可靠性,如何提高传输效率,如何解决会话管理...

12620
来自专栏我和PYTHON有个约会

30.3. 企业级开发进阶2.3:UDP编程

回顾TCP协议:一个非常重要的数据传输协议,很多网络协议都是以TCP协议为基础的;TCP协议要求服务器和客户端通过三次握手交互的方式建立可靠的连接,然后再进行数...

13130
来自专栏子勰随笔

关于终端设备的设备唯一性的那些事之MAC地址

40530
来自专栏吴伟祥

计算机网络基础知识总结 转

计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不...

10310
来自专栏Python中文社区

Python渗透测试之tcp几种端口扫描的讲解

專 欄 ❈exploit,Python中文社区专栏作者,Python渗透测试与安全爱好者。希望与作者交流或者对文章有任何疑问的可以与作者联系: QQ:1585...

313100

扫码关注云+社区

领取腾讯云代金券