1. TCP/IP协议栈

与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层、表示层和会话层。

在网络接口层的主要协议有:ARP、RARP等。ARP协议主要功能是根据IP地址获取物理地址,RARP协议则反之。

网络层的主要协议有:IP、路由协议(RIP、OSPF、BGP等)。IP协议为网络上的每台主机编号,在此基础上才有路由协议,因此路由协议是基于IP协议的。

传输层的主要协议有:TCP、UDP。传输层有端口号的概念,端口号是指TCP或UDP协议能根据端口号找到接受数据包的进程。(也就是说一个TCPServer和一个UDPServer可以绑定同一个端口,详细解释参看第2节)

应用层协议主要有:HTTP、FTP、SMTP等。

2. “协议号+端口号”唯一确定了接收数据包的进程

协议号:协议号是存在于IP数据报的首部的20字节的固定部分,占有8bit。该字段是指出此数据报所携带的是数据是使用何种协议,以便目的主机的IP层知道将数据部分上交给哪个传输层协议(TCP/UDP等)。

端口号:端口号存在于TCP/UDP报文的首部。

目的主机收到数据报后,IP协议会将解析到协议号,并据此将数据上送给相应的传输层协议;传输层协议收到数据并解析,获得端口号,并据此将数据上送给相应的接受数据报的进程。

从上述过程可知,端口号是按照传输层协议号划分了“命名空间”的,因此,同一主机可以同时运行绑定同一端口号的TCP Socket(java中对应ServerSocket、Socket)和UDP Socket(java中对应DatagramSocket)而不发生冲突。

3. 附件

测试使用的代码:

TCPClient.java

 1 package socket;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.Date;
6
7 public class TCPClient {
8
9 /**
10 * @param args
11 */
12 public static void main(String[] args) {
13 // TODO Auto-generated method stub
14 try {
15 System.out.println(new Date());
16 InetAddress remoteAddress = InetAddress.getByName("22.11.143.60");
17 // InetAddress localAddress = InetAddress.getByName("127.0.0.1");
18 // Socket socket = new Socket(remoteAddress, 1287, localAddress, 1288);
19 // Socket socket = new Socket(remoteAddress, 1287);
20 Socket socket = new Socket ();
21 socket.connect(new InetSocketAddress(remoteAddress,1287), 1000);
22 socket.setSoTimeout(110000);
23 System.out.println(new Date());
24 PrintWriter os = new PrintWriter(socket.getOutputStream());
25 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
26 String msg = "hello";
27 os.println(msg);
28 os.flush();
29 System.out.println("Client: " + msg);
30 // Thread.sleep(1000);
31 System.out.println("Server: " + is.readLine());
32 System.out.println(new Date());
33 Thread.sleep(1000000);
34 System.out.println("end!");
35 os.close();
36 is.close();
37 socket.close();
38 } catch (UnknownHostException e) {
39 // TODO Auto-generated catch block
40 System.out.println(new Date());
41 e.printStackTrace();
42 } catch (IOException e) {
43 // TODO Auto-generated catch block
44 System.out.println(new Date());
45 e.printStackTrace();
46 }
47 catch (InterruptedException e) {
48 // TODO Auto-generated catch block
49 System.out.println(new Date());
50 e.printStackTrace();
51 }
52
53 }
54
55 }

TCPServer.java

 1 package socket;
2
3 import java.io.*;
4 import java.net.*;
5
6 public class TCPServer {
7
8 /**
9 * @param args
10 */
11 public static void main(String[] args) {
12 // TODO Auto-generated method stub
13 try {
14 ServerSocket serverSocket = new ServerSocket(1287,2);
15 Socket socket = serverSocket.accept();
16
17 PrintWriter os = new PrintWriter(socket.getOutputStream());
18 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
19 while (true){
20 System.out.println("Client: " + is.readLine());
21 String msg = "hi";
22 os.println(msg);
23 os.flush();
24 System.out.println("Server: " + msg);
25 }
26 // os.close();
27 // is.close();
28 // socket.close();
29 // serverSocket.close();
30 } catch (IOException e) {
31 // TODO Auto-generated catch block
32 e.printStackTrace();
33 }
34 // catch (InterruptedException e) {
35 // // TODO Auto-generated catch block
36 // e.printStackTrace();
37 // }
38
39 }
40
41 }

UDPClient.java

 1 package socket;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7 import java.net.SocketException;
8 import java.net.UnknownHostException;
9
10 public class UDPClient {
11
12 public static void main(String[] args) {
13 try {
14 DatagramSocket ds = new DatagramSocket();
15 String str = "hello";
16 DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("22.11.143.60"),1287);
17 ds.send(dp);
18
19 ds.close();
20
21 } catch (SocketException e) {
22 e.printStackTrace();
23 } catch (UnknownHostException e) {
24 e.printStackTrace();
25 } catch (IOException e) {
26 e.printStackTrace();
27 }
28
29 }
30
31 }

UDPServer.java

 1 package socket;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.SocketException;
7
8 public class UDPServer {
9
10 public static void main(String[] args) {
11
12 try {
13 DatagramSocket ds = new DatagramSocket(1287);
14 byte[] buf=new byte[100];
15 DatagramPacket dp=new DatagramPacket(buf,100);
16 ds.receive(dp);// block here
17 System.out.println(new String(dp.getData()));
18
19 ds.close();
20
21 } catch (SocketException e) {
22 e.printStackTrace();
23 } catch (IOException e) {
24 e.printStackTrace();
25 }
26
27
28 }
29
30 }

http://www.cnblogs.com/kqdongnanf/p/4773539.html

 

关于TCP/IP协议栈(转)的更多相关文章

  1. 【转】TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  2. C1000k 新思路:用户态 TCP/IP 协议栈

    现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...

  3. 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

    前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...

  4. TCP/IP协议栈概述

    TCP/IP协议栈概述 这篇文章虽然只是很粗浅的介绍了ISO/OSI 网络模型,但确实把握住了关键点,某种意义上,简单回顾一下就可以加深对TCP/IP协议栈的理解. 原作者:阮一峰 链接: http: ...

  5. [转]为何TCP/IP协议栈设计成沙漏型的

    http://m.blog.csdn.net/blog/dog250/18959371 前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的.这个问题问得好!我先不谈为何它如此设计,我一 ...

  6. windows下重新安装TCP/IP协议栈

    一.windows重装TCP/IP协议     前两天在windows下安装开发环境的时候,把系统的TCP/IP协议栈给搞跪了,导致系统无法ping localhost.无法在程序中创建socket等 ...

  7. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

  8. TCP/IP协议栈与数据包封装+TCP与UDP区别

    ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. T ...

  9. TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  10. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

随机推荐

  1. NET Core控制反转(IoC)

    ASP.NET Core中的依赖注入(1):控制反转(IoC)   ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制, ...

  2. 6月27日CTO俱乐部下午茶印象

    作者:朱金灿 来源:http://blog.csdn.net/clever101 感谢CSDN的邀请,有幸参加了6月27日“CTO俱乐部下午茶时光:CTO在团队管理中所遇到的那些事”活动.本期的主讲嘉 ...

  3. 树形dp专辑

    hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表 ...

  4. wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

    原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...

  5. Asp.net MVC4之 一个简单的小例子

    练习: 新建一个mvc项目 要求: 有3个视图  Login Index Details 目的:感受一下MVC与传统WebForm的差异性 WebForm的请求模型 MVC请求模型 传统WebForm ...

  6. 【Android先进】查看手机记忆库状态和应用方法

    一世 我们知道.android程序存储器通常被限制16M.当然,24M的,和android程序存储器分为2部分:native和dalvik.dalvik 就是我们寻常说的java堆.我们创建的对象是在 ...

  7. MYSQL IFNULL使用功能

    稍后的MYSQL IFNULL使用此功能的特定叙事,供大家参考学习,假设你MYSQL IFNULL条款的使用功能类别遇到似问题.最好看. MYSQL IFNULL(expr1,expr2)       ...

  8. Directx11学习笔记【十五】 基本几何体的绘制

    本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5573970.html 前面实现简单地形的教程,我们只是绘制了一个网 ...

  9. new TimerTask(robot)(转)

    import java.awt.Dimension; import java.awt.Robot; import java.awt.Toolkit; import java.io.PrintStrea ...

  10. php+sqlite cms

    1 phpSQLiteCMS 最新版本 phpSQLiteCMS 2.0.4 http://phpsqlitecms.net/ 2 taoCMS  最新版本 [2.5Beta5下载地址] 需要php ...