`

网络编程TCP/IP协议组

    博客分类:
  • java
阅读更多
TCP/IP是个协议组:
     主要可以分为4层,分别是应用层 ,传输层,网络层,数据链路层。分层的好处在于如果要改变某一个协议时候,不会去影响到其他协议。如同Java中的封装,隔离。


1. 应用层 :负责处理特定的应用程序,在TCP/IP协议组中预存了各类同用的应用服务,比如FTP,DNS,HTTP等等
2. 传输层:对上层应用层提供处于网络连接中的两台计算机之间的数据传输,有两个不同的协议:TCP/UDP、
3. 网络层:处理网络上流动的数据包。(网络上传输的最小数据单元) 该层主要协议有 IP(网际协议) ICMP(internet控制报文协议 用于IP主机 ,路由器之间传递控制消息) IGMP(Internet组管理协议)。这一层规定了通过怎样的路径到达对方的计算机,把数据包传送给对方。
4. 数据链路层,也叫做网络接口层,主要处理网络连接硬件部分,比如操作系统,硬件设备驱动,网卡,光纤等等。

tcp/ip协议组:
     http客户端传输到TCP进行分割表上序号和端口号,转发给网络层,网络层回在数据包上增加作为通讯地的mac地址,然后转发给链路层。接受端接受到数据会一直向上传输数据,一直到应用层。

FTP主要用于传输文件和访问,DNS域名系统协议,有圆点和一串英文字母组成,属于分布式系统。

http协议简介:
     http协议(Hyper Text  Transfer Protocol)属于超文本传输通讯协议,它允许超文本标记语言(HTML) 文档从web服务器传送到客户端浏览器 ,是属于应用层的一种协议,承载与tcp之上,有请求和响应构成,是一个标准的客户端服务器模型。客户端发起请求request(post,get) 服务器接受到请求,然后对数据报文响应(response)回送给浏览器。
http协议:两种方式。1.0 和1.1,
     HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
     HTTP1.1  HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。 HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间  HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。
HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。

http协议应用场景:webService= http+xml,Reset =http+json, API的实现:HTTP+XML/JSON

TCP协议 :tcp协议是一个面向连接的、可靠的协议 TCP(transmission control protocol) 是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流而非报文流。字节流服务
    
如下所示:服务端:
                 //建立服务端
                ServerSocket server= new ServerSocket(8888);
                 //等待客户端的响应
                Socket s= server.accept();
                 // 获取客户端胡输入流 和 输出流
                OutputStream os= s.getOutputStream();
                InputStream is= s.getInputStream();
                BufferedReader br= new BufferedReader( new InputStreamReader(is));
                PrintStream bw= new PrintStream( os); //专门用来打印的(写)
                    客户端:        
               //建立客户端
                Socket socket= new Socket( "localhost",8888); //Localized获取本机的IP地
                 // 获取客户端的输入流 和 输出流
                OutputStream os= socket.getOutputStream();
                InputStream is= socket.getInputStream();
                BufferedReader br= new BufferedReader( new InputStreamReader(is));
                PrintStream bw= new PrintStream( os); //专门用来打印的(写)


使用TCP协议传输数据,当数据从A端传到B端后,B端会发送一个确认包(ACK包)给A端,告知A端数据我已收到!UDP协议就没有这种确认机制!这就是为什么说TCP协议可靠,UDP协议不可靠.

UDP协议:udp是一个不可靠的、无连接协议 UDP(user datagram protocol ) UDP向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接。是一种不可靠的连接
UDP 协议是无连接的数据传输协议并且无重传机制,会发生丢包、收到重复包、乱序等情况。而对于数据精确性要求不高的状态数据以及视频数据,丢包的影响不大。因为会不断收到新的包,丢失的个别包会有新的包来覆盖,所以只需在远程控制系统的通信部分自行处理乱序及重复包的问题,而对于丢包的问题一般不作处理。    但对于命令包这种需要精确收发的数据, 可在程序的开发中加入丢包重发和超时丢弃的处理。 当然,如果开发的是对于实时性要求不高的事件型控制命令的传输,不希望发生指令的丢失也可以直接采用TCP协议。TCP的重传机制正好适合这种情况。 QQ普通会员就是使用的UDP协议进行传输数据!
udp 服务器:
public class UdpServer {
      public static void main(String[] args) {
            DatagramSocket ds = null;
            try{
                  ds = new DatagramSocket(5000);//创建udp连接
                  byte[] buf = new byte[1024];
                  DatagramPacket dp =new DatagramPacket(buf, buf.length);//将数据包拆分buf
                  ds.receive(dp);//接受数据包
                  String mes = new String(buf);
                  System.out.println(mes);
            }catch(Exception e){
                  e.printStackTrace();
            }finally{
                  if(ds !=null){
                        ds.close();
                  }
            }
      }
}
udp 客户端
public class UdpClient {
      public static void main(String[] args) {
            DatagramSocket ds = null;
            String mes = "hello, 你好";
            try{
                  ds = new DatagramSocket();//创建UDP连接
                  byte[] buf = mes.getBytes();
                  DatagramPacket dp = new DatagramPacket(buf, buf.length,
                              new InetSocketAddress("127.0.0.1", 5000));//将数据包打好,并指定到数据包
                  ds.send(dp);//发送数据包
                  
            }catch(Exception e){
                  e.printStackTrace();
            }finally{
                  ds.close();
            }
      }
}


网络层:IP 名为Internet Protocol,翻译层网际协议,位于网络层。 ip的作用,主要将各种数据包传给对方,要确保传送到对放那里,就需要满足各种条件,最重要的就是两个一个是ip地址,一个mac地址。ip地址节点本分配到的地址,mac地址指网卡地址,基本不会改变。所属固定地址。可以使用ARP协议凭借MAC地址进行通信。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对于的MAC地址。在网络上通信的双方经过多台计算机,或者网络,中转连接到对方,利用中转时,就是利用一个中转地址MAC地址连接对方。

ip tcp DNS 和HTTP协议的关系。
我们访问一个网站 比如www.baidu.com.首先将域名发送给DNS去解析,DNS解析后将百度的IP地址返回给客户端,然后发起http请求,生层整队目标web服务器的请求报文,然后请求报文传输给传输层,tcp 会去将http请求按序号分给层字节流报文段,然后到网络层 IP地址会去搜索地方ip地址,一边中转,一边传输。然后到了服务器tcp会成客户端接受到的报文按照序号重组报文段,服务器http会对请求内容进行处理响应,然后服务器也会tcp/Ip通信协议,回传响应,然后输出到客户端,展示给页面。

URI和URL关系
      
URI :统一资源标识符,是一个用于标识某一互联网资源名称的字符串。唯一的,用于标识某一互联网资源。
URL:统一资源定位符,它描述一台服务器某特定资源的特定位置,能过通过明确的一个地址找到资源。(资源所处的位置)

URI和URL关系:URL是URI的子集。
URI格式:http://user:pass@www.example.com: 80/home/index.html?age=11#mask主要有方案+主机+路径+查询 +片段
http:协议方案名
user:pass:登录信息(认证)
www.example.com:服务器地址
80:端口号
/home/index.html:文件路径
age=11:查询字符串
mask:片段标识符

协议方案名:http:https:、ftp:等,在获取资源时要指定协议类型,方案名不分大小写。解析url按照那种方案开始。
登录信息(认证):
     指定用户名和密码作为服务器端获取资源时必要的登录信息,此项是可选的。用户名和密码用:分割,然后@符号分割后面的地址。
服务器地址:
     使用绝对URI必须指定待访问的服务器地址。
服务器端口号:
     指定服务器连接的网络端口,此项是可选的。
路径组件:
     指定服务器的文件路径来定位资源的特定资源,格式为:/home/index.html
参数:
     为应用程序提供访问资源所需的附加信息.列如:ftp://127.24.24.24/pud/pic;type=d
查询字符串:
     针对已指定的文件路径的资源,可以使用查询字符串传入任意参数,此项是可选的。很多查询数据库,通过参数去搜素范围变小
片段标识符:
     通常可标记出以获取资源中的子资源(文档内的某一个位置),此项是可以选择的。是用#和ur其他部分l分开。客户端是不能将片段传送给服务器的,服务器只处理这个url对象,不处理某个片段。根据片段显示那块片段内容。
分享到:
评论

相关推荐

    实训(2)Windows环境下TCP/IP协议的配置,TCP/IP诊断.pdf

    本文主要讲述了在 Windows 环境下 TCP/IP 协议的配置和诊断,包括网络配置、TCP/IP 协议配置、Ping 命令工具的使用、Ipconfig 工具的使用等内容。 一、网络配置 在 Windows 系统中进行网络配置需要了解网络组件的...

    基于TCP/IP协议的Socket编程

    基于TCP/IP协议的Socket编程是网络编程的基础,它提供了一个可靠的数据流服务,可以实现客户端和服务器之间的数据交换。Java实现的Socket编程是基于TCP/IP协议的,可以满足各种网络应用的需求。

    基于TCP/IP协议的网络编程

    在IT行业中,网络编程是构建分布式系统和互联网应用程序的基础,而TCP/IP协议栈则是网络通信的核心。本主题将深入探讨“基于TCP/IP协议的网络编程”,特别是如何利用C++语言和Windows API函数来实现这一目标。 TCP...

    TCP/IP协议与网络编程技术

    上篇主要介绍TCP/IP协议簇中的常用协议,下篇专门介绍网络编程知识与技能。 (2)具体在编写每一节的内容时将原理知识与实用技能融为一体。以方便读者学习。 (3)考虑到TCP/IP协议比较抽象,学习起来有一定的难度,...

    tcp/ip协议与网络编程

    1.1 Internet中的“世界语”——TCP/IP协议 1.2 TCP/IP协议的体系结构 1.3 TCP/IP协议的工作过程 习题

    STM32单片机TCP/IP协议

    TCP/IP(传输控制协议/互联网协议)是一组用于规范网络通信的标准协议,使得不同设备之间可以高效、可靠地交换数据。在STM32上实现TCP/IP协议栈,可以让微控制器具备连接到互联网的能力,从而实现远程控制、数据传输...

    TCP/IP协议族

    《TCP/IP协议族》由编程与网络权威专家BehrouzA.Forouzan撰写,是一本关于TCP/IP协议族的经典教材《TCP/IP协议族》图文并茂,重点概念突出。除了讲解一些基本概念和底层技术外,还介绍了TCP/IP协议族中的核心协议IP...

    经典TCP/IP协议教材

    20章的内容可能包括:TCP/IP概述、网络接口、IP协议、IPv6、ICMP与ARP、网络层选路、TCP协议、UDP协议、套接字编程、窗口与拥塞控制、传输层实现、应用层协议、网络安全、因特网的未来等。每一章都深入浅出地阐述了...

    TCP/IP协议详解全三卷 下载

    无论是网络架构设计、服务器端编程还是网络安全分析,TCP/IP协议的知识都是必不可少的。 总结来说,TCP/IP协议是互联网的心脏,而《TCP/IP协议详解》这套书则是理解这一心脏运作的绝佳教材。它覆盖了从物理层到应用...

    对以太网全硬件TCP/IP协议栈的简单认识-w5500以太网协议基本认识.pdf

    全硬件TCP/IP协议栈是一种将TCP/IP协议栈集成到硬件中的解决方案,极大地简化了网络通信的实现过程。下面详细介绍其四层结构: **1. 应用层**:主要处理用户级别的应用程序需求,例如HTTP、FTP等服务。 **2. 传输层...

    Socket服务端客户端以tcp/ip协议发送接收报文

    在IT领域,网络通信是不可或缺的一部分,而Java Socket编程则是实现网络通信的一种常见方式,尤其在TCP/IP协议栈上。本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 ...

    基于TCP/IP的socket编程

    在IT领域,网络通信是不可或缺的一部分,而TCP/IP协议族是网络通信的基础。"基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是...

    TCP/IP协议编程

    TCP/IP协议编程是网络通信的基础,对于任何涉及网络应用开发的程序员来说,理解和掌握这一领域至关重要。本教程适合初学者,旨在深入浅出地介绍TCP/IP协议及其在编程中的应用,特别是通过socket进行网络通信的方法。...

    TCP/IP 协议 PDF

    TCP/IP协议是互联网的核心协议,它定义了网络设备如何交换数据以及数据如何被格式化以在各种网络中传输。这个PDF文档集可能是对TCP/IP协议的详细解释,提供了非扫描版,意味着它易于阅读和搜索,非常适合学习和参考...

    TCP/IP详解

    在第二卷中,Stevens更深入地探讨了TCP/IP协议在实际系统中的实现细节,包括Unix系统的网络编程接口(如socket API)和网络管理工具。这部分内容涵盖了网络编程的基本概念,如套接字编程,以及TCP、UDP和IP的实现...

    TCP/IP非常经典的TCP/IP协议

    理解TCP/IP协议的工作原理对于网络编程、系统管理员和网络安全专家来说都是基础。深入学习TCP/IP协议可以让你更好地设计、实现和优化网络应用程序,解决网络问题,并确保数据的安全传输。通过实践和研究TCP/IP相关的...

    qt网络编程 tcp/ip简单通信

    总结,QT网络编程涉及的知识点涵盖了网络通信的基础理论、QT库的使用以及TCP/IP协议的实践应用。通过QT提供的API,我们可以轻松构建出功能完善的服务器和客户端程序,实现可靠的数据交换。在编写和调试过程中,理解...

    TCPIP网络协议.rar_22SZ_TCP/IP_antspjy_tcpip 编程_网络协议

    在“TCP/IP_antspjy_tcpip 编程”这部分,可能涉及的是如何使用编程语言(如C、C++、Java等)实现TCP/IP协议栈的功能,包括创建套接字、建立连接、发送和接收数据、处理网络错误等。antspjy可能是某位作者或项目的...

    TCP/IP协议与网络编程

    Internet的核心技术是TCP/IP协议,由于当前Internet的普及,TCP/IP程序设计已经成为当前最热门和应用最广泛的程序设计技术。

Global site tag (gtag.js) - Google Analytics