안녕하세요. 이번 시간에는 TCP/IP(Transmission Control Protocol / Internetwork Protocol)에 대해 알아보도록 하겠습니다.


 TCP/IP란 현 세대에서 인터넷을 사용하는 모든 통신의 기본 프로토콜입니다. 현재의 네트워크는 TCP/IP를 통해 모든 통신이 가능합니다. TCP/IP는 OSI 7계층을 4개의 층으로 나누어 구성하는데, 1~2계층을 네트워크 접속 계층(Network Access Layer), 3계층을 인터넷 계층(Internet Layer), 4계층을 전송 계층(Transport Layer), 5~7계층을 응용 계층(Application Layer)으로 구분합니다. 각 계층의 역할은 아래와 같습니다.


 - 네트워크 접속 계층 : OSI 7계층 중 1,2 계층에 해당하는 역할을 하며 프레임의 송수신을 담당합니다. 대표적인 프로토콜로는 ARP(Address Resolution Protocol)이 있습니다.

 - 인터넷 계층 : IP 주소 체계를 관리하고, 패킷을 받았을 때 목적지 IP 주소를 찾아 해당 목적지로 패킷을 보내는 라우팅 기능을 합니다. 대표적인 프로토콜로는 IP와 ICMP(Internet Control Message Protocol)가 있습니다.

 - 전송 계층 : 종단 간 통신을 담당합니다. 대표적인 프로토콜로는 TCP(Transmission Control Protocol)과 UDP(Uesr Datagram Protocol)가 있습니다.

 - 응용 계층 : 네트워크를 통한 사용자의 데이터를 처리하는 역할을 합니다. 대표적인 프로토콜로는 HTTP, FTP 등이 있습니다.


※ ARP : 주소 변환 프로토콜로서 MAC 주소와 IP 주소를 매칭하여 MAC주소를 모를 경우 IP 주소를 통하여 MAC 주소를 알아내는 프로토콜입니다. 반대로 MAC 주소는 알지만 IP 주소를 모를 경우 사용하는 프로토콜은 RARP(Reverse Address Resolution Protocol)입니다.

※ TCP / UDP : TCP는 포트 번호를 사용하여 신뢰성 있는 통신을 제공하는 반면 UDP는 포트 번호는 사용하지만 신뢰성은 제공하지 않는 프로토콜입니다. 하지만 UDP는 헤더가 TCP보다 짧아 TCP보다 처리 속도가 빠르다는 장점이 있습니다.

※ TCP의 주요 사용 예시 : 인터넷 웹사이트, 은행 사이트 등등 보안이 필요한 상황

※ UDP의 주요 사용 예시 : 게임, 스트리밍 등등 속도가 중요한 상황


-TCP 헤더-

 TCP는 연결 지향형 서비스 제공 및 신뢰성 있는 데이터 전송을 보장합니다. 이러한 특성들은 TCP 세그먼트 헤더 내의 여러 필드에 의해 가능합니다. TCP 세그먼트의 헤더는 아래와 같은 구조를 이루고 있는데요. 그렇다면 하나씩 살펴보도록 하곘습니다.



 출발지 포트(Source Port) : 세그먼트가 출발된 호스트의 몇번 포트에서 나왔는지를 나타냅니다.

 목적지 포트(Destination Port) : 세그먼트가 목적지 호스트의 몇번 포트로 향하는지를 나타냅니다.

 순서 번호(Sequence Number) : 해당 세그먼트의 번호를 나타냅니다. TCP는 각 세그먼트에 번호를 포함하여 전송하고 수신할 때는 순서 번호를 통해 재조립합니다.

 수신 확인 응답 번호(Acknowledgement Number) : 해당 세그먼트가 무사히 도착했다는 의미를 발신 장치로 보내 수신 성공 여부를 알려줍니다.

 헤더 길이(Data Offset) : TCP 헤더의 크기를 나타냅니다. 최소 20비트에서 최대 60비트까지 가능합니다.

 예약 비트(Reserved) : 나중의 다른 목적이 생겼을 경우 사용하는 필드입니다.

 URG(Urgent) : 이 비트가 1로 설정돼있으면 긴급 포인터 필드로 지정된 긴급 데이터를 우선 처리합니다.

 ACK(Acknowledgement) : 이 비트가 1로 설정돼있으면 수신 확인 응답 번호 이전까지의 모든 세그먼트들이 잘 도착했음을 나타냅니다.

 PSH(Push) : 이 비트가 1일 경우 일반 데이터를 빨리 처리하도록 요청하는 비트입니다.

 RST(Reset) : 이 비트가 1일 경우 TCP 세션을 리셋합니다.

 SYN(Synchronization) : 통신을 시작할 때 두 호스트 사이의 세션을 초기화하고 시퀀스 넘버를 동기화하기 위한 제어 비트입니다.

 FIN(Finish) : 세션을 종료할 때 사용하는 제어 비트입니다.

 윈도우 사이즈(Window Size) : 수신측으로부터 시퀀스 넘버의 수신 없이 전송할 수 있는 데이터의 양을 지정합니다.

 TCP 체크섬(TCP Checksum) : TCP 데이터에 대한 오류 검사를 하기 위한 필드입니다.

 긴급 포인터(Urgent Pointer) : 데이터 전송 중 어느 곳에 긴급 데이터가 있는지를 명시하기 위한 포인터입니다.

 옵션(Options) : 최대 40바이트까지 가능하고 여러 옵션이 들어있습니다. 


-UDP 헤더-

 UDP 헤더는 TCP와 마찬가지로 전송 계층에서 동작하고 포트 번호를 기반으로 동작하지만 수신한 데이터에 대한 응답이 없고 데이터의 흐름을 제어하는 기능을 하지 않기 때문에 TCP 헤더보다 훨씬 짧은 헤더를 갖고 있습니다. UDP 세그먼트의 헤더 구조는 아래와 같습니다.



 출발지 포트(Source Port) : 세그먼트가 출발한 출발지 호스트의 포트 번호를 나타냅니다.

 목적지 포트(Destination Port) : 세그먼트가 향하는 목적지 호스트의 포트 번호를 나타냅니다.

 길이(UDP Length) : UDP 헤더와 데이터를 포함한 길이를 나타냅니다.

 체크섬(UDP Checksum) : UDP 헤더와 데이터의 오류를 나타내기 위한 필드입니다.


-IP 헤더-

 IP 프로토콜은 패킷을 출발지에서 목적지까지 전송하는 역할을 담당합니다. 그렇다면 IP 헤더의 구조와 역할에 대해 알아보도록 하겠습니다.



 버전(Version) : IP가 어떤 버전을 사용하는지를 나타냅니다. 현재는 IPv4를 사용하지만 점차 IPv6를 사용하는 추세로 넘어가고 있습니다.

 헤더(Internet Header Length) : 헤더의 길이를 나타내는 필드입니다.

 TOS(Type of Service) : 라우터나 호스트 등의 장치에서 패킷 처리에 대한 우선순위를 설정합니다.

 전체 길이(Total Length) : 헤더 + 데이터의 길이를 나타냅니다.

 식별자(Identification) : 각 패킷마다 부여되는 고유 번호를 말합니다. 패킷은 전송될 때 최대 전송 단위(MTU; Maximum Transfer Unit) 값에 의해 여러 프래그먼트(Fragment)로 분할된 후 전송되는데 이때 수신한 프래그먼트들은 식별자 값을 기준으로 재조립됩니다.

 플래그(Flags) : IP 패킷의 분할(fragmentation) 가능 여부, 해당 프래그먼트가 마지막인지 아닌지를 알려주는 필드입니다.

 분할 위치(Fragment Offset) : IP 패킷이 분할될 때 원래 어느 위치에 있었는지를 나타내는 필드입니다.

 TTL(Time-to-Live) : 패킷의 루핑(Looping) 현상으로 생기는 문제를 해결하기 위해 사용되며 말 그대로 패킷의 수명을 나타냅니다. TTL 값은 라우터를 하나 거칠때마다 -1되며 0이 되면 해당 패킷은 폐기됩니다.

 프로토콜(Protocol) : 패킷에 캡슐화되어 있는 상위 계층의 PDU가 어떤 프로토콜을 사용하는지 나타내는 필드입니다.

 헤더 체크섬(Header Checksum) : IP 헤더의 오류가 존재하는지를 검사하는 필드입니다.

 출발지 주소(Source Address) : 패킷이 출발한 출발지 장치의 IP 주소를 나타냅니다.

 목적지 주소(Destination Address) : 패킷이 향하는 목적지 장치의 IP 주소를 나타냅니다.

 옵션(Options) : IP 프로토콜의 동작 옵션을 정의하는 필드입니다.


이상으로 TCP/IP와 각 프로토콜의 헤더에 대해 알아보았습니다. 이상으로 TCP/IP에 대한 설명을 마치도록 하겠습니다.


※ TCP 헤더 사진 출처 : https://www.bing.com/images/search?view=detailV2&ccid=wKncs9P0&id=75E06E7F40DAD995567DDA715BD21C24634BE4E4&thid=OIP.SEFsKDK127AMxb2Snp0ypAHaDk&mediaurl=https%3a%2f%2fupload.wikimedia.org%2fwikipedia%2fcommons%2fd%2fda%2fTCP_header.png&exph=348&expw=722&q=tcp+header&simid=608042731728669634&selectedIndex=3&qft=+filterui%3alicense-L2_L3&ajaxhist=0


※ UDP 헤더 사진 출처 : https://www.bing.com/images/search?view=detailV2&ccid=c1OKLCzb&id=32CA892FD5B445207C40E6C9A3C6859455DEEF84&thid=OIP._c_FUeOtTnVwgeWwz9pobwHaB9&mediaurl=https%3a%2f%2fupload.wikimedia.org%2fwikipedia%2fcommons%2f0%2f0c%2fUDP_header.png&exph=192&expw=725&q=udp+header&simid=608002217291220812&selectedIndex=1&qft=+filterui%3alicense-L2_L3&ajaxhist=0


※ IP 헤더 사진 출처 : https://www.bing.com/images/search?view=detailV2&ccid=BVw7gxdc&id=E1310EABEC6E01D69B69F06F94A8B423908C62F4&thid=OIP.BVw7gxdc8UUuzrargNIPlQHaDl&mediaurl=https%3a%2f%2fupload.wikimedia.org%2fwikipedia%2fcommons%2ff%2ff9%2fIPv4_header_%25281%2529.png&exph=349&expw=720&q=IP+%ED%97%A4%EB%8D%94+%EA%B5%AC%EC%A1%B0&simid=608012112923591051&selectedIndex=7&qft=+filterui%3alicense-L2_L3&ajaxhist=0

'Network ' 카테고리의 다른 글

IP 주소 클래스  (0) 2018.09.13
Subnetting [ 서브넷팅 ]  (0) 2018.09.10
OSI 7계층  (0) 2018.09.03
OSI(Open Systems Interconnection) 참조 모델  (0) 2018.08.29
패킷트레이서 사용방법  (0) 2018.08.28

+ Recent posts