프로토콜, TCP, UDP
23년 이전 글/네트워크

프로토콜, TCP, UDP

구글 검색 100% 활용하기

 

google에서 site:cloudshark.org fragmentation ip 를 검색하면 나오는 사이트

site:github.com fragmentation pcap

fragment 된 파일들 찾을 수 있음

 

구글에 intitle:"index of" 이력서 검색하면 남의 데이터가 봐짐..

 

site, filetype, inurl, intext, 등의 키워드를 사용하여 구글을 검색하면 기존에 보이지 않던 다양한 정보에 접근이 가능하게 됨

검색을 위한 명령어처럼 생각하면 좋을 듯 하다

 

예시) site:jp filetype:inc mysql_connect  디비 접속 사이트까지 나옴

 

 

UDP(User Datagram Protocol)

단순하고 빠름(교섭 단계가 없음)

  • 패킷이나 흐름 제어, 단편화 및 전송 보장 등의 기능 등을 제공하지 않음
  • 헤더는 TCP헤더에 비해 간단
  • 요청 메시지와 응답 메시지로 구성

성격 급한 한국인을 위한 찰떡맞춤 네트워크이지만.. 어디까지 보냈는지, 상태는 어떤지 표시하는게 없는게 단점

(TCP에 왜 Sequence Number, Acknowledgement Number가 있는지 알 수 있는 부분)

 

 

네트워크 프로토콜 - TCP(Transmission Control Protocol)

운영체제는 네트워크를 통해 들어오는 데이터를 메모리에서 받음, memory(back log = queue)

메모리 공간 내에 일정 영역에 정책을 걸어두고, 그곳을 거쳐가게 하는 방식으로 처리

이러한 데이터는 os 레벨까지 넘어가지 않고, 메모리 상에서 처리되므로, 추가적인 지연시간이 발생하지 않음

와이어샤크는 이 memory back log를 카피해서, os 영역에서 확인하는 것인데 이것도 무조건 다 카피할 순 없는게, 네트워크가 빠르게 지나간다면 보지 못할 수도 있음

그렇다고 back log를 실시간으로 볼 수는 없음. 메모리 자원에 접근하려면 권한이 필요한데, os단에서 다루기 위해 준비하는 동안 패킷이 queue를 지나가버리기 때문

 

TCP Header 구조

  • TCP Control Flags : 8bit, 제어 플래그
  • CWR(Reduced) : Congestion Windows
  • ECE : ECN Echo, Congestion Windows
  • Urgent : Urgent Point 필드 사용
  • Ack : Acknowledgment number 필드 사용
  • Push : 상위 애플리케이션 데이터가 있음
  • Reset : 강제 세션 종료(비정상적), 해당 서비스를 하지 않음
  • Syn : 동기화 하여 세션 시작
  • Fin : 세션을 종료함(정상 종료)

 

  • Windows size : 16bit, TCP header + data 전송 중 손상되지 않았는지 확인
  • Urgent Pointer : 16bit, 긴급 데이터의 마지막 바이트를 나타냄
  • Options : 가변길이. 4byte 단위, TCP header에 없는 정보를 송신할 때 사용

 

당신이 물을 마실 준비가 되었는지 내가 알바가 아니다

 

 

UDP의 단점을 극복하기 위해 노력한 TCP Header 구조

TCP Header 구조

Flags를 통해 통신의 상태를 계속 나타내줌(UDP는 그런거 없음)

 

TCP 연결 관리

  • 연결을 사용해 응용 프로그램을 식별
  • 송신자 또는 수신자와 같은 종단을 포트 번호 및 호스트 IP 주소로 정의
  • 종단간 통신을 위한 TCP 연결은 양 종단에 의해서 정의

 

Flag를 통해 관리되는 state diagram

모든 단말기(인터넷이 가능하고, 운영체제가 있는)는 header 정보를 받으면 처리할 수 있는 방법이 운영체제 단에서 구성되어 있음

 

3-way Handshake(State Diagram 상단)

 

SYN -> SYN+ACK -> ACK

 

(WireShark) 192.168.40.6에서 browser로 192.168.40.31로 접속한 예시

맨 좌측이 index 인데, 시간 순서에 따라 SYN, SYN+ACK, ACK 가 표기 된걸 맨 오른쪽에 볼 수 있다

 

접속 종료시 4-way Handshake (State Diagram 좌측하단)

 

 

 

 

ICMP

오류에 관한 처리를 지원하는 프로토콜

  • IP는 신뢰성을 보장하지 않으며, 네트워크나 라우터에 에러 발생 시 대처 불가능해서
  • 수신 측에서 송신 측으로 데이터 사고에 대한 내용 전달이 필요했기 때문

site:cloudshark.org icmp echo

ping 8.8.8.8 의 경우

통신의 상태를 전달해줌. (wire shark 하단 창에서, Internet Control Message Protocol 토글 메뉴 확인)

Type과 코드에 따라 목적지에 도달했는지, 도달하지 못했는지를 볼 수 있음

Type: 3 (Destination unreachable), Code: 3 (Port unreachable)

또는 Type: 0 (Echo (ping) reply), Code: 0 등으로 표시함

타입으로 결과와, 오류일 경우 Code로 오류 종류를 표시함

제 IP 아니라서 추적해도 소용 없습니다

 

ICMP 타입에 대한 스펙을 확인할 수 있는 홈페이지, 코드 넘버에 대한 해석 필요할 때 참조하자

 

Internet Control Message Protocol (ICMP) Parameters

41 ICMP messages utilized by experimental mobility protocols such as Seamoby [RFC4065]

www.iana.org

개발자 기준 주로 사용하게 되는 Type 넘버 (0, 3, 5, 8)

 

 

IGMP

multicast의 대명사로 생각하면 좋음, 그룹핑 하는데 특화된 프로토콜

winamp, 소리바다 등 이전의 방송시스템에서 IGMP를 사용했었음. 

224는 브로드 캐스트 영역

 

IPSEC

site:cloudshark.org ipsec 구글에서 검색

가상네트워크를 사용하면 통신하는 192.168.140의 같은 네트워크처럼 보이지만, 다른 지역에 있을수도 있음(핫라인)

VPN + (터널링, 암호화) 사용하는 프로토콜로, 기밀성과 무결성에 대한 프로토콜

암호화가 되어있으면 빠른망을 사용해서 전송도 할 수 있음 예) UDP

 

3계층에서 IPSEC

4계층에선 SSL VPN, 주로 키 인증을 활용하게 됨 

 

4계층

포트가 가장 중요한 계층이라고 볼 수 있음, 가능하면 관등성명처럼 포트와 서비스를 연관지을 수 있을 것

 

PORT

해당 홈페이지에 가면 PORT 사용에 대한 레퍼런스를 참고할 수 있다

 

 

Service Name and Transport Protocol Port Number Registry

mpm 45 udp Message Processing Module [recv]

www.iana.org

  • System Ports(0-1023) : root / admin 권한으로 프로그램을 바인딩( 앞에 있는 권한으로 프로그램을 실행시키는 의미)
  • User Ports(1024-49151) : 사용자 권한으로 프로그램을 바인딩
  • Dynamic and/or Private Ports(49152-65535) : C/S 구조에서 client 측에 할당되는 포트 

 

PORT 확인

CMD에서 netstat -an을 치면 현재 포트 사용을 확인할 수 있음

Windows

netstat -ano

netstat -anob(cmd 관리자 권한 동작 후)

netstat -ano | findstr :포트넘버  (리눅스의 grep 같은 것)

Linux

netstat - antp (tcp) p는 프로세스

netstat - anup (udp)

netstat -antp | grep :포트넘버

 

 

DNS

확인하는 순서로(일반적인 순서로 바뀔 수 있음)

  1. cache에 저장되어 있는 dns를 확인(브로드 캐스트를 줄이기 위한 장치) cmd에서 ipconfig /displaydns,                          cache에 저장된 dns를 초기화 하는 명령어는 ipconfig /flushdns
  2. hosts file(C:\Windows\System32\drivers\etc\hosts), (수정하려면 관리자 권한으로) :  개발자들이 쓴다면 hosts 파일을 수정해서, 내가 사용할 도메인으로 적용해둔다면 실제 서비스에 도메인을 연결한 것 처럼 사용해볼 수 있을 것임
  3. 외부 dns server 확인

파일에 자주가는 사이트를 지정해서 좀 더 속도를 높힐 수 있음

 

hosts 파일을 메모장으로 열어 확인한 것

 

cmd에서 nslookup을 하면 도메인을 검색해볼 수 있음
server [ip숫자] 치면 dns 서버도 변경 가능

 

번외

http 프로토콜 변천사

http -> https -> HSTS -> HTTP3(QUIC)

HTTP는 원래 암호화 되어 있는 것이 아니기 때문에 특정 프로세스를 활용해 암호화를 한다.

HTTP3버전의 프로토콜은 기존 TCP 기반에서 UDP 기반으로 바뀐 프로토콜이다

 

QUIC

출처: https://ykarma1996.tistory.com/86

  • 암호화가 프로토콜의 일부 기능으로 포함
  • 스트림 연결과 암호화 스펙등을 포함한 모든 핸드쉐이크가 단일 요청/응답으로 끝
  • 패킷 개별적으로 암호화, 다른 데이터 부분의 패킷을 기다릴 필요가 없음
  • 통신이 멀티플렉싱 되며, 이를 이용 HOLB를 극복가능
  • QUIC는 운영체제 커널과 독립적으로 응용 프로그램 공간 내 구현 가능, 따라서 데이터 이동에 따른 컨텍스트 전환에 의한 오버헤드 X
  • Source Address 무관하게 서버에 대한 연결 고유하게 식별하는 연결 식별자가 포함 되어 있음, IP 주소 변경되어도 커넥션 유지 가능

 

 

반응형

'23년 이전 글 > 네트워크' 카테고리의 다른 글

HTTP  (0) 2022.07.15
DNS, Terminal,Routing ,Http, Ftp, Web, Application  (0) 2022.07.14
Information Protocol, IP  (0) 2022.07.12
OSI 7계층, 프로토콜, 캡슐레이션  (0) 2022.07.11