TCP UDP TCP UDP send()sendto()sendmsg() recv()recvfrom()recvmsg() OS Passive Active TCP UDP IP TCP UDP MTAMail Transf

Similar documents
BSDソケットによるIPv6プログラミングを紐解く

/*

3 3.1 LAN ISDN (IP) 2 TCP/UDP IP IP IP IP (Ethernet) Ethernet LAN TCP/UDP LAN Ethernet LAN 2: Ethernet ATM, FDDI, LAN IP IP IP 3 IP 2 IP IP IP IP IP 3

1) // 2) I/O 3) Japan Advanced Institute of Science and Technology 2013/07/26 1

untitled

main main Makefile Makefile C.5 Makefile Makefile Makefile A Mech (TA ) 1. Web ( iku

IP L09( Tue) : Time-stamp: Tue 14:52 JST hig TCP/IP. IP,,,. ( ) L09 IP (2017) 1 / 28

2 1: OSI OSI,,,,,,,,, 4 TCP/IP TCP/IP, TCP, IP 2,, IP, IP. IP, ICMP, TCP, UDP, TELNET, FTP, HTTP TCP IP

TCP T ransmission Control Protocol TCP TCP TCP TCP TCP TCP TCP TCP c /(18)

r4.dvi

演算増幅器

目次 1. DB 更新情報受信 SW 仕様書 構成および機能 全体の構成 DB 更新情報受信 SW の機能 ソフトウェアの設計仕様 DB 更新情報受信 SW の仕様 資料編... 5

I /07/30 Dependable Network Innovation Center, Japan Advanced Institute of Science and Technology

エラー処理・分割コンパイル・コマンドライン引数

Chapter - UDP のプログラミング - UDP ネットワークプログラミングで TCP の次に多い通信方法が UDP だと思われます UDP はデータが宛先に届いたかどうかを関知しないため データの到着を保障しない点が TCP と異なります そのため UDP を使った通信を行うプログラムを書

DA100データアクイジションユニット通信インタフェースユーザーズマニュアル

<4D F736F F F696E74202D D54352D6B61746F2D D B82C988CB91B682B582C882A2835C D834F E F205B8CDD8AB B83685D>

Makefile, TCPソケットサーバ, コマンドライン引数

I TCP 1/2 1

第1回 ネットワークとは

v6prog-05.ppt

通信プログラムの試作ーーー UDP を用いたじゃんけんゲームシステム ーーーー裘彬濱 南山大学情報理工学部 ソフトウェア工学科青山研究室

i TCP/IP NIC Intel 3com NIC TCP/IP *1 20 IPv4 IPv6 IPv6 TCP/IP TCP/IP *1 3

オペレーティングシステムとネットワークプログラミング 担当 : 吉藤英明 yoshfuji+camp2008 AT wide.ad.jp セキュリティ & プログラミングキャンプ /08 OS プロトコルスタック (C)2008 YOSHIFUJI Hideaki,

CD U.S. Government License Proprietary computer software. Valid license from HP required for possession, use or copying. Consiste

para02-2.dvi

実験 6 通信基礎実験 1 目的 ネットワークを通じてデータ転送を行うことを体験的に学ぶために 本実験ではT CP/IPプロトコルを使い ワークステーション間で通信を行うクライアントサーバモデルのプログラムを作成する 2 解説 1 ネットワークとプロトコルネットワーク ( コンピュータネットワーク

橡c03tcp詳説(3/24修正版).PDF

Microsoft Word - EGX100によるH663通信手引

untitled

Chapter - TCP通信の基礎 - TCPによるプログラミングの流れ TCPによる通信は サーバとクライアントの者間で行われます クライアントがサーバに TCPによるプログラミングの流れ 話通信は 両端の紙コップを糸で繋いではじめて利用可能になります ソケットも同様で 通 信相手のソケットと仮

AsteriskのIPv6対応について

r4.dvi

(Microsoft PowerPoint - IPv6_summit_r2.ppt [\214\335\212\267\203\202\201[\203h])

ソフトウェア開発実践セミナー ネットワークの基礎と UNIX ネットワークプログラミング 金子勇 土村展之 情報理工学系研究科数理情報学専攻 2002 年 11 月 6 日 ( 第 4

Contents Part1: TCP Part2: TCP Part3: TCP Part4: Part5: TCP Part6:

1 telnet WWW 1.1 telnet WWW URL html 1.2 URL 1 % telnet 80 Trying 2001:2f8:1c:d048::850d: telnet: c

演算増幅器

ネットワークプログラミング

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

情報ネットワーク演習 2007 年 10 月 11 日 ( 木 )

Microsoft PowerPoint pptx

rzab6pdf.ps

IP IP DHCP..

TCP/IP Internet Week 2002 [2002/12/17] Japan Registry Service Co., Ltd. No.3 Internet Week 2002 [2002/12/17] Japan Registry Service Co., Ltd. No.4 2

file"a" file"b" fp = fopen("a", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose(fp); fp = fopen("b", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose

untitled

ネットワークプログラミング

4 実験結果 // 用意されたヘッダファイル #include < stdio.h> #include < fcntl.h> #include < netdb.h> #include < sys/types.h> #include < sys/socket.h> #include < sys/sta

Mac OS X Server QuickTime Streaming Server 5.0 の管理(バージョン 10.3 以降用)

BSDソケットAPI リファレンスマニュアル

情報科学実験ガイダンス

注意 2013 年くらいに調べた話なので 変化していることもあるかもしれません 2

新・明解C言語 実践編

program.dvi

untitled

1 Linux UNIX-PC LAN. UNIX. LAN. UNIX. 1.1 UNIX LAN. 1.2 Linux PC Linux. 1.3 studenta odd kumabari studentb even kumabari studentc odd kumabari student

lexex.dvi

comment.dvi

1 $ cat aboutipa 2 IPA is a Japanese quasi-government 3 organization established in accor- 4 dance with The Law for Information 5 Processing Technolog

(Microsoft Word - BBT\216\346\220\340SiTCP-VME-Master_Rev11_.doc)

slide5.pptx

Gnutella Peer-to-Peer(P2P) P2P Linux P2P

Macintosh HD:Users:ks91:Documents:lect:nm2002s:nm2002s03.dvi

untitled

r08.dvi

r07.dvi

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

ネットワークプログラミング

ohp07.dvi

ソケット API プロセス間通信の汎用 API プロセス : プログラムのひとつの単位 ex)./a.out とかやると 1 つのプロセスが立ち上がる ソケット API IPv4 IPv6 UNIX domain (UNIX 計算機内プロセス間通信 ) 本実験では IPv4 の TCP および UD

ネットワークプログラミング

thesis.dvi

ohp08.dvi

IP Windows Word Excel Web Web Word Excel XHTML CSS Web Windows Word Excel Web XHTML CSS

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

Condition DAQ condition condition 2 3 XML key value

double float

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

untitled

BW BW

tp2ps output file

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

【注意事項】RXファミリ 組み込み用TCP/IP M3S-T4-Tiny

buho210.dvi

: Nonblocking I/O readpartial read EOF Solaris FILE 256 ungetc SEGV errno stdio considered harmful p.

WinHPC ppt

新・明解C言語 ポインタ完全攻略

tuat1.dvi

KASAGO TCP/IP ユーザーズマニュアル 簡易版

Page 1

新版明解C言語 実践編

Baud Rate 9600 Parity NONE Number of Data Bits 8 Number of Stop Bits 1 Flow Control NONE 1 RS232C 200mm 2,000mm DIMM ( ) Telescope East/West LX200 * 1

untitled

2004 SYN/ACK SYN Flood G01P014-6

main2.dvi

NetEng-04.ppt

untitled

インターネットで個人放送局を開くには (1)

Transcription:

3 -- 7 2011 2 TCPUDP APIApplication Programming Interface BSD UNIX C System V UNIX XTIX /Open Transport Interface XTI TCP/IP ISO OSI XTI TCP/IP OSI TCP UDP API API API API UNIX Windows 7-1 TCP UDP 7-2 TCP UDP 7-3 7-4 c 2014 1/(18)

-- 7 7--1 2011 2 7--1--1 TCP UDP TCP UDP send()sendto()sendmsg() recv()recvfrom()recvmsg() OS 7--1--2 Passive Active TCP UDP IP TCP UDP MTAMail Transfer Agent Web SIP User Agent 7--1--3 c 2014 2/(18)

socket() IP UNIX open() socket() 012 7--1--4 socket() UNIX close() Windows closesocket() TCP shutdown() bind() IP connect() IP connect() IP OS TCP socket() socket() listen() TCP accept() TCP accept() accept() TCP listen() send()sendto()sendmsg() recv()recvfrom() recvmsg() send()recv() TCP UDP connect() IP IP sendto() recvfrom() UDP IP send()sendto()recv()recvfrom() sendmsg()recvmsg() setsockopt() getsockopt() Nagle 7--1--5 IP c 2014 3/(18)

IPv4 sockaddr_in IPv6 sockaddr_in6 IPv6 IPv4 IPv6 IPv4/IPv6 Protocol-independent 1) sockaddr_storage addrinfo getaddrinfo()getnameinfo()freeaddrinfo() sockaddr_storage IP addrinfo sockaddr_storage IPv4 IPv6 getaddrinfo() IP addrinfo getaddrinfo() freeaddrinfo() IP IP IPv6 getnameinfo() addrinfo IP DNS 7--1--6 UNIX errno TCP RST Windows Winsock errno WSAGetLastError() UNIX getaddrinfo() errno gai_strerror() 7--1--7 UNIX TCP TCP RST send() SIGPIPE SIGPIPE Linux send() MSG_NOSIGNAL sockaddr c 2014 4/(18)

7--1--8 TCP UDP send() recv() setsockopt() SO_RCVTIMEOSO_SNDTIMEO SOL_SOCKET error TCP 2) setsockopt() SO_KEEPALIVE SOL_SOCKET select()poll() 7--1--9 UNIX fcntl() ioctl() Linux send() recv() MSG_DONTWAIT Windows ioctlsocket() WSAAsync c 2014 5/(18)

-- 7 7--2 TCP UDP 20112 7--2--1 file_client0.c) (file_server0.c IP IPv6 getaddrinfo() getnameinfo() IPv4 IPv6 LinuxMacOS XWindows IPv6 OS TCP UDP TCP UDP TCP/UDP #ifdef #else#endif UDP 7--2--2 (le server0.c) 1 /* file_server0.c: TCP/UDP Ver. 1.0 2011.01.11 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #ifdef _WIN32 6 #include <winsock2.h> 7 #include <ws2tcpip.h> 8 #define exit(_z) WSACleanup();exit(_Z) 9 #define close(_z) closesocket(_z); 10 typedef int socklen_t; 11 #else 12 #include <sys/types.h> 13 #include <sys/socket.h> 14 #include <netdb.h> 15 #include <netinet/in.h> 2011 1 c 2014 6/(18)

16 #include <unistd.h> 17 #endif 18 19 //#define UDP /* TCP UDP // 20 #define BUFSIZE 8192 /* BUFSIZE >= MSGSIZE + DUMMY 21 22 #ifdef UDP 23 #define MSGSIZE 1024 24 #define DUMMY 4 25 #else 26 #define MSGSIZE 8192 27 #endif 28 29 enum args {CMD_NAME, READ_FILE, LOCAL_PORT}; 30 31 int main(int argc, char *argv[]) 32 { 33 struct sockaddr_storage foreign; /* 34 struct addrinfo *local; /* 35 struct addrinfo hints; /* getaddrinfo 36 socklen_t len; /* 37 int sock0; /* 38 int sock; /* 39 char buf[bufsize]; /* 40 int size; /* 41 int total; /* 42 char ip[ni_maxhost]; /* IP ( ) 43 char port[ni_maxserv]; /* ( ) 44 FILE *fp; 45 46 #ifdef _WIN32 47 WSA wsadata; 48 WSAStartup(MAKEWORD(2, 0), &wsadata); 49 #endif 50 51 if (argc!= 3) { 52 fprintf(stderr, "Useage: %s [read file] [local port]\n", argv[cmd_name]); 53 exit(1); 54 } 55 56 /* local 57 memset(&hints, 0, sizeof hints); 58 #ifndef UDP 59 hints.ai_socktype = SOCK_STREAM; /* TCP 60 #else 61 hints.ai_socktype = SOCK_DGRAM; /* UDP 62 #endif 63 hints.ai_flags = AI_PASSIVE; /* 64 getaddrinfo(null, argv[local_port], &hints, &local); 65 66 /* 67 sock0 = socket(local->ai_family, local->ai_socktype, local->ai_protocol); 68 69 /* 70 bind(sock0, local->ai_addr, local->ai_addrlen); 71 #ifndef UDP 72 listen(sock0, 5); /* (TCP) 73 #endif 74 75 while (1) { 76 fp = fopen(argv[read_file], "rb"); 77 c 2014 7/(18)

78 len = sizeof foreign; 79 #ifndef UDP /* (TCP) 80 sock = accept(sock0, (struct sockaddr *) &foreign, &len); 81 #else /* (UDP) 82 recvfrom(sock0, buf, sizeof buf, 0, (struct sockaddr *) &foreign, &len); 83 sock = sock0; /* UDP 1 84 #endif 85 86 /* IP 87 getnameinfo((struct sockaddr *) &foreign, len, ip, sizeof ip, port, sizeof port, 88 NI_NUMERICHOST NI_NUMERICSERV); 89 printf("ip=%s PORT=%s\n", ip, port); 90 91 total = 0; 92 while ((size = fread(buf, sizeof buf[0], MSGSIZE, fp)) > 0) { 93 #ifndef UDP /* (TCP) 94 send(sock, buf, size, 0); 95 #else /* (UDP) (4 ) 96 sendto(sock, buf, size + DUMMY, 0, (struct sockaddr *) &foreign, len); 97 #endif 98 printf("%d ", size); 99 total += size; 100 fflush(stdout); 101 } 102 printf("\ntotal = %d byte\n", total); 103 104 #ifndef UDP /* (TCP) 105 close(sock); 106 #else /* (UDP) 107 sendto(sock, buf, DUMMY, 0, (struct sockaddr *) &foreign, len); 108 #endif 109 fclose(fp); 110 } 111 /* 112 freeaddrinfo(local); /* getaddrinfo 113 close(sock0); /* 114 exit(0); 115 116 return 0; 117 } 7--2--3 (le client0.c) 1 /* file_client0.c: TCP/UDP Ver. 1.0 2011.01.11 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #ifdef _WIN32 6 #include <winsock2.h> 7 #include <ws2tcpip.h> 8 #define exit(_z) WSACleanup();exit(_Z) 9 #define close(_z) closesocket(_z); 10 #else 11 #include <sys/types.h> 12 #include <sys/socket.h> 13 #include <netdb.h> 14 #include <netinet/in.h> 15 #include <unistd.h> 16 #endif 17 c 2014 8/(18)

18 //#define UDP /* TCP UDP // 19 #define BUFSIZE 8192 20 21 #ifdef UDP 22 #define DUMMY 4 23 #endif 24 25 enum args {CMD_NAME, WRITE_FILE, FOREIGN_IP, FOREIGN_PORT}; 26 27 int main(int argc, char *argv[]) 28 { 29 struct addrinfo *foreign; /* 30 struct addrinfo hints; /* getaddrinfo 31 int sock; /* 32 char buf[bufsize]; /* 33 int size; /* 34 int total; /* 35 FILE *fp; 36 37 #ifdef _WIN32 38 WSA wsadata; 39 WSAStartup(MAKEWORD(2, 0), &wsadata); 40 #endif 41 42 if (argc!= 4) { 43 fprintf(stderr, "Useage: %s [write file] [foreign ip] [foreign port]\n", argv[cmd_name]); 44 exit(1); 45 } 46 fp = fopen(argv[write_file], "wb"); 47 48 /* foreign IP 49 memset(&hints, 0, sizeof hints); 50 hints.ai_family = PF_UNSPEC; /* 51 #ifndef UDP 52 hints.ai_socktype = SOCK_STREAM; /* TCP 53 #else 54 hints.ai_socktype = SOCK_DGRAM; /* UDP 55 #endif 56 getaddrinfo(argv[foreign_ip], argv[foreign_port], &hints, &foreign); 57 58 /* 59 sock = socket(foreign->ai_family, foreign->ai_socktype, foreign->ai_protocol); 60 61 /* 62 connect(sock, foreign->ai_addr, foreign->ai_addrlen); 63 #ifdef UDP /* (UDP) 64 send(sock, buf, DUMMY, 0); 65 #endif 66 67 total = 0; 68 while ((size = recv(sock, buf, BUFSIZE, 0)) > 0) { /* 69 #ifdef UDP /* (4 ) (UDP) 70 if ((size -= DUMMY) <= 0) 71 break; 72 #endif 73 fwrite(buf, sizeof buf[0], size, fp); 74 printf("%d ", size); 75 total += size; 76 fflush(stdout); 77 } 78 printf("\ntotal = %d byte\n", total); 79 c 2014 9/(18)

80 freeaddrinfo(foreign); /* getaddrinfo 81 close(sock); /* ( ) 82 fclose(fp); 83 exit(0); 84 85 return 0; 86 } 7--2--4 1 LinuxMacOS X UNIX OS cc -o file_server0 file_server0.c cc -o file_clinet0 file_clinet0.c Windows Visual Studio Tools GUI ws2_32.lib cl ws2_32.lib file_server0.c cl ws2_32.lib file_clinet0.c TCP UDP (file_server0.c) 19 (file_client0.c) 18 2 Windows././file_server0 getaddrinfo() addrinfo bind() IPv6 IPv4 IPv6 IPv4 IPv6 IPv6 IPv4./file_client0 IP IP DNS c 2014 10/(18)

7--2--5 TCP UDP TCP UDP 1 TCP TCP FTP 3) UDP TCP UDP file_client0.c 64 file_server0.c 107 4 4 4 5 4 UDP TCP UDP TFTP 4) 2 TCP send() recv() 8192 UDP send() 1028 1024 4 TCP IP UDP IP IP Ethernet 1024 1 K 7--2--6 UDP connect TCP UDP UDP connect() UDP connect() connect() 62 64 68 send()recv() sendto()recvfrom() UDP connect() ICMP connect() ICMP send() recv() connect() ICMP recvfrom() sendto() UNIX 0 0 Windows UDP ICMP ICMP Type 3 (Destination Unreachable)Code 3 (port unreachable) c 2014 11/(18)

-- 7 7--3 TCP/UDP 2011 2 7-2 TCP UDP 7--3--1 1 IP 2 send() send() 1 recv() recv() UDP 4 1TCP $./file_clinet0 file 192.168.0.28 55555 8192 1944 4800 4344 1877 total = 25501 byte 2UDP $./file_clinet0 file 192.168.0.28 55555 1024 1024 1024 1024 1024 1024 1024 1024 102 4 1024 1024 1024 1024 1024 1024 1024 1024 1 024 1024 1024 1024 1024 1024 925 total = 24477 byte $./file_server0 file 55555 IP=::ffff:192.168.3.54 PORT=56423 8192 8192 8192 925 total = 25501 byte $./file_server0 file 55555 IP=::ffff:192.168.3.54 PORT=56442 1024 1024 1024 1024 1024 1024 1024 1024 102 4 1024 1024 1024 1024 1024 1024 1024 1024 1 024 1024 1024 1024 1024 1024 1024 925 total = 25501 byte 7--3--2 TCP UDP sockaddr ai_socktype SOCK_STREAMSOCK_DGRAM 71 7-3-1 send()recv() send() recv() TCP send() recv() 1 1 TCP MSSMaximum Segment Size Nagle c 2014 12/(18)

send(8192) 1028 send(1028) recv() recv(1028) 1028 send(1028) recv() recv(1028) 1028 recv(1028) send(1028) recv(1028) 1028 send(1028) recv(1028) 1028 send(1028) send(8192) recv(1028) 1028 send(1028) 1028 recv(1028) send(1028) 1028 send(1028) recv(8192) recv(1028) 1028 send(1028) recv(1944) recv(1028) 1028 send(1028) recv(1028) 1028 send(1028) 456 1028 send(1028) recv(1028) recv(4800) send(8192) send(1028) recv(4344) recv(1028) 1028 send(1028) recv() recv(1028) 1028 send(925) send(1028) 429 recv(1028) 1028 send(1028) recv(1877) recv(1028) recv(929) 929 send(929) 71 send() TCP 1 send() TCP recv() OS recv() 1MSS recv() UDP send() recv() 1 1 UDP UDP send() recv() UDP UDP UDP 7--3--3 TCP TCP recv() send() send() OS send() OS send() Linux send() sendto() MSG MORE send() UDP c 2014 13/(18)

close() close() TCP setsockopt() SO_LINGER 10 SOL_SOCKET close() 7--3--4 TCP TIME WAIT TCP 72 TIME_WAIT TCBTransmission Control Block 2 MSLMaximum Segment Lifetime 5) TIME_WAIT TCB FIN close( ) FIN close( ) close( ) FIN close( ) FIN RST RST TCB 2MSL TCB SO_LINGER SO_LINGER 72 SO LINGER setsockopt() SO_LINGER SOL_SOCKET TCB RTT 72 TCP RST TCP SO_LINGER 0 close() FIN RST c 2014 14/(18)

-- 7 7--4 2011 2 TCP Web TCP 7--4--1 73 1 MSS FTP HTTP SMTP RTT RTT 73 Long Fat Pipe TCP TCP setsockopt() SO_SNDBUFSO_RCVBUF SOL_SOCKETTCP SO_RCVBUF SO_SNDBUF SO_RCVBUF SO_SNDBUF 65535 TCP TCP 6) OS OS TCP c 2014 15/(18)

send() 8192 send() 7) TCP OS 512 8) MSS Alignment 4096 8192 p1 p2 #define BUFSIZE 8192 #define ALIGNMENT 4096 char buf[bufsize + ALIGNMENT], *p1, *p2; p1 = buf; p2 = buf + (ALIGNMENT - ((unsigned long) buf % ALIGNMENT)); p1 p2 DMA 9) OS 10) 7--4--2 1 MSS SMTP SIPFTP HTTP 1 74 1 TCP 74 2 3 Nagle send() 2 send() c 2014 16/(18)

1 1 send() sendmsg() + + + + + + + 74 + + 7--4--3 + + + + 75 + + + + + + + + TCP Nagle 75 send() 75 Nagle c 2014 17/(18)

Nagle 75 Nagle Nagle setsockopt() TCP_NODELAY IPPROTO_TCP Nagle Nagle Nagle HTTP SMTP Nagle Nagle 1) R. Gilligan, S. Thomson, J. Bound, J. McCann, W. Stevens: Basic Socket Interface Extensions for IPv6, RFC 3493, 2003. 2) R. Braden: Requirements for Internet Hosts Communication Layers, RFC 1122, 1989. 3) J. Postel, J. Reynolds: File Transfer Protocol, RFC 959, 1985. 4) K. Sollins: The TFTP Protocol (Revision 2), RFC 1350, 1992. 5) J. Postel: Transmission Control Protocol, RFC 793, 1981. 6) J. Semke, J. Mahdavi, and M. Mathis, Automatic TCP buffer tuning, ACM SIGCOMM 98, pp.315-323, Aug. 1998. 7) Crowcroft, J. I. Wakeman, Zheng Wang, D. Sirovica: Is Layering Harmful?, IEEE Network Magazine, vol.6, pp.20-24, Jan. 1992. 8) 3, 2001. 9) Silicon Graphics, Inc.: TTCP.C modified in 1989 at Silicon Graphics, Inc., ttcp.c, 1989 10) S. Parker, C. Schmechel: Some Testing Tools for TCP Implementors, RFC 2398, 1998. c 2014 18/(18)