[精通WindowsSocket网络开发-基于VC++实现]第二章——TCP/IP简介

来源:互联网 发布:年轻人 dha omega 知乎 编辑:程序博客网 时间:2024/05/16 14:36

OSI

开发系统互连参考模型(OSI,Open System Interconnection)

  1. 物理层:bit流,有计算机和网络介质组成,负责将数据编码成比特流,并以此方式在网上传输
  2. 数据链路层:负责准备物理层传输,修正传输中的错误,将数据封装成帧(Frame)
  3. 网络层:管理网络地址,选择路由,定义数据封包(Packet)
  4. 传输层:将上层数据分段(Segment),提供端到端的传输,提供服务质量(QoS)
  5. 会话层:建立,管理,终止会话等
  6. 表示层:将网络传输的内容转换为用户有意义的编码
  7. 应用层:为操作系统或网络应用程序提供访问网络服务的接口

TCP/IP

TCP/IP协议从名称上看包括传输控制协议(TCP)和因特网协议(IP)两个协议。实际上,TCP/IP由许多协议组成,是Internet协议族,TCPIP是其中两个最重要的协议。

 

IP

因特网协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMPTCPUDP提供分组发送服务。用户进程通常不需要涉及这一层。

对数据分组进行无连接的最佳传送路由选择(即提供全网范围的寻址功能)

ARP

地址解析协议(Address Resolution Protocol)此协议将网络地址映射到硬件地址。

为已知的IP地址确定网络接口层的MAC地址;

RARP

反向地址解析协议(Reverse Address Resolution Protocol)此协议将硬件地址映射到网络地址

为已知的网络接口层MAC地址确定对应的IP地址。

ICMP

网间报文控制协议(Internet Control Message Protocol)此协议处理信关和主机的差错和传送控制。

提供控制和传递消息的功能(但通信时需用IP封装)

TCP

传送控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP

UDP

用户数据报协议(User Datagram Protocol)这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。

FTP

文件传输协议(File Transfer Protocol)允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。

SMTP

简单邮件传送协议(Simple Mail Transfer Protocol)SMTP协议为系统之间传送电子邮件。

Telnet

终端协议(Telnet Terminal Procotol)允许用户以虚终端方式访问远程主机

HTTP

超文本传输协议(Hypertext Transfer Procotol)

TFTP

简单文件传输协议(Trivial File Transfer Protocol)

TCP/IP模式中,因特网协议(IP)的主要任务是将数据分割成许多较小的封包(Packet),并且将这些包发送出去。IP属于无连接的通信协议,不能保证每个封包都正确无误地到达目的地。至于封包以何种方式传递,能否正确到达目的地,则由上次协议(TCPUDP)负责。 

编程接口即是套接字,是应用层到传输层的接口。套接字作为应用层与传输层的接口,是因为应用层具有以下几个方面的特点:

(1)应用层处理应用程序的细节,而不必知道通信细节。TCP/IP模型中应用层下面的3层不必知道应用程序的细节,但能处理所有通信细节

(2)通常应用程序形成用户进程,而TCP/IP模型中下面3层通常作为操作系统内核的一部分。

客户端与服务端之间是有TCP/IP进行通信如上图所示。传输层的通信是有的协议为TCP,网络层是有的协议为IP。客户端与服务器之间的数据在一端时从用户进程到内核,在另一端则是从内核到用户进程。套接字在应用层到内核之间和从内核懂爱应用层之间承担接口的角色。

UDP

UDPUser Datagram Protocol的缩写,是一种无连接的传输层协议,提供不可靠信息传输服务。UDP具有以下特点

  1. 提供无连接服务。客户端向服务器发送数据时不必先建立连接。客户端创建一个套接字并向服务器发送一个数据报,然后客户端可以立即用这个套接字向另外一个服务器发送其他数据
  2. 不能确保UDP数据报最终到达目的地。UDP对接受的数据报不发送确认,发送端不知道是否被正确接收,也不会重发数据。
  3. UDP传输数据较TCP快,占用系统资源少

TCP

TCPTransmission Control Protocol的缩写,是一种面向连接的,可靠的,基于字节流的传输层通信协议。该协议在主机间建立一个虚拟连接,以实现可靠的数据通信。因特网协议(IP)不能保证数据包准确发送给目标主机,而TCP不同。发送数据时,TCP要求对方在连接数据后返回一个确认。如果在某个时限内TCP没有接收到对方的确认,那么TCP将重新发送数据包。在连接数据的一方,如果接收到无序的数据包,TCP还将负责数据包的重新排序。TCP具有以下特点:

  1. 提供面向连接的服务。客户端与服务器通信时,必须首先建立连接
  2. 提供可靠的服务。当TCP向对方发送数据时,要求对方返回一个确认。如果没有接收到对方的确认,则TCP自动重传数据
  3. TCP对发送的数据进行排序,为每个发送字节关联一个序列号。对方根据接收到的数据序列号,对接收数据排序,从而保证了数据顺序
  4. TCP提供流量控制。TCP总是告知对方它能够接收数据的字节数
  5. TCP连接是全双工的。这意味着应用程序在任何时候,既可发送数据也可接收数据

三次握手

建立一个TCP连接,需要经过一些几个步骤

  1.  服务器准备接收客户端的连接
  2.  客户端向服务器发送连接请求。此时客户端TCP发送一个SYN分节
  3.  服务器确认客户端的SYN(同步),同时也发送一个SYN分节。服务器以单个分节向客户端发送SYN和客户端SYNACK(确认)
  4.  客户端确认服务器的SYN

由于在建立连接时至少需要交换3个分组,所以称为TCP的三次握手

TCP终止连接

TCP3个分节建立连接,用4个分节终止连接,具体如下

  1. 连接中的一方首先执行了关闭,该方被称为执行了一个主动关闭。该发送方的TCP向对方发送一个FIN(结束)分节,表示发送数据完毕
  2. 接收方接收到FIN,执行被动关闭。接收方TCP向发送方发送一ACK
  3. 接收方也执行关闭。这导致接收方的TCP也发送一个FIN
  4. 原发送方接收到接收方的FIN后,他的TCP也返回一个ACK

因为每个方向都需要发送一个FIN和返回一个ACK,所以关闭连接时一般需要4个分节。但也不排除步骤(2)和步骤(3)ACKFIN合成一个分节的情况。

端口

MAC地址

也叫物理地址。网卡的物理地址是由网卡生产厂家烧如网卡的EPROM,是全球唯一的48比特的整数,并以机器可读的方式存入主机借口中。Cmd>ipconfig/all  ,Plysical Address的这一行,其后所显示的地址即为该设备的MAC地址。

每个网络设备(网卡,路由器)都有自己的物理地址(MAC地址),这是全球唯一的,可以保证不同网络设备间的准确通信。

介质访问控制(Media Access Control)地址一般位于网卡中,用于标识网络设备,控制对网络介质的访问。例如,网络设备要访问传输电缆(网线,位于物理层),必须具备一个MAC地址,发送的数据要到达目的地,必须知道目的地的MAC地址。因为一个网卡具有唯一的MAC地址,所以又叫做物理地址。

端口

在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从065535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。 

查看端口: cmd->netstat -a -n,查看TCPUDP链接的端口号及状态 
关闭端口:如关闭SMTP服务的25端口,可以这样做:首先打开控制面板,双击管理工具,再双击服务。接着在打开的服务窗口中找到并双击“Simple Mail Transfer Protocol SMTP服务,单击停止按钮来停止该服务,然后在启动类型中选择已禁用,最后单击确定按钮即可。这样,关闭了SMTP服务就相当于关闭了对应的端口。
开启端口:如果要开启该端口只要先在启动类型选择自动,单击确定按钮,再打开该服务,在服务状态中单击启动按钮即可启用该端口,最后,单击确定按钮即可。 
  

端口分类:逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:
1. 按端口号分布划分
1)知名端口(Well-Known Ports
  知名端口即众所周知的端口号,范围从01023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
2)动态端口(Dynamic Ports
  动态端口的范围从102465535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
  不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626WAY 2.48011Netspy 3.07306YAI病毒是1024等等。


此文章来自于【http://blog.csdn.net/ouyangshima/article/details/8953231】

原创粉丝点击