TCP Header

제어 플래그

CWR / ECE: 혼잡 제어

URG: Urgent Pointer 에 값이 있으면 1, 없으면 0, 순서 상관없이 먼저 전송됨
(강사님: Urgent Pointer - 데이터 일부분에 긴급 데이터 위치를 마킹해주는 것. 먼저 전송되지는 않음. 우선 처리되도록 우선순위를 높이는 정도?)

ACK: AcKnowledgement Number 필드에 유효한 값 있으면 1, 0 이면 Acknowledgement Number 필드 무시. TCP 연결 시작후 항상 1

PSH: 1이면 버퍼링된 데이터를 상위계층으로 빠르게 전달할 수 있게 함 (여기가 마지막 패킷이야~ 조립해서 위로 올려보내렴)

RST: 강제로 연결 초기화 (LISTEN, SYN_RCVD 상태를 제외하고 이 플래그가 1이면 CLOSED 상태 됨), 한쪽에서 일방적으로 연결 해제 (정상적인 연결해제는 양쪽에서 해제)

*제외된 상태는 RST 수신하면 LISTEN 상태가 됨 (아직 연결된 상태가 아니므로)

SYN: 연결 시작을 위한 비트

  • SYN = 1   ACK = 0 연결 요청
  • SYN = 1   ACK = 1 연결 요청 응답
  • SYN = 0   ACK = 1 데이터 또는 ACK 패킷

FIN: 연결 종료를 위한 비트

  • FIN = 1                   종료 요청
  • FIN = 1   ACK =1   종료 요청 응답

Sliding Window Algorithm

헤더에서 Window 필드가 재전송에 사용된다고 했는데, 위 그림처럼 전송 실패에도 데이터가 버퍼에 아직 저장되어 있기 때문에 재전송이 가능함

Sliding Window Algorithm?
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 전송할 수 있게 하여 흐름을 동적으로 조절하는 제어 알고리즘
윈도우에 포함되는 모든 패킷을 전송하고, 전송이 확인되는(ACK) 대로 윈도우를 옆으로 옮겨(slide) 다음 패킷들을 전송하는 방식

ACK 없이 전송? ACK가 올때까지 윈도우가 모두 소진되지 않으면 기다리는 시간 없이 패킷 전송

  • 수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하게 되면 전송된 바이트가 수신 윈도우에 저장되다가 초과되지 않으므로 위와 같은 상황이 가능
  • 송신 윈도우 = 전송 후 ACK 받지못한 바이트 + 전송될 바이트

UDP Header

TCP는 정확하고 신뢰성 있는 전송을 하기 위해 헤더가 복잡했지만, UDP는 신뢰성보단 신속! 이기 때문에 헤더가 간단함

TCP 통신

3-way handshake: 세션을 연결 설립
(3WH 이후 연결 지향적, 세션 연결 유지)
4-way handshake: 세션을 종료

TIME_WAIT 상태일 때 클라이언트가 FIN 을 수신하더라도 일정시간 세션을 유지함
서버에서 FIN을 전송하기 전에 클라이언트가 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 인해 해당 ACK 패킷이 FIN 패킷보다 늦게 도착하는 상황이 발생할 수 있기 때문임

따라서 클라이언트는 서버로부터 FIN을 수신하더라도 일정시간(default 240) 동안 세션을 남겨놓고 남은 패킷을 기다림


네트워크 기본 명령어

  • MAP / IP Address 확인
    window: ipconfig /all
    mac: ifconfig -a
  • ARP Cache 확인
    window / mac: arp -a
  • 라우팅 테이블 확인
    window: route print, netstat (mac)
    -a : 현재다른PC와 연결(Established)되어 있거나 대기(Listening)중인 모든 포트 번호를 확인
    -r : 라우팅 테이블 확인 및 커넥션되어 있는 포트번호를 확인
    -n : 현재 다른PC와 연결되어 있는 포트번호를 확인
  • 핑테스트
    window / mac: ping 도메인 주소 or IP 주소
    윈도우와 달리 맥은 리눅스 계열이라 사용자가 멈추기 전까지 핑을 계속 보냄
  • 경로 추적
    window: tracert IP 주소
    mac: traceroute IP 주소
  • 연결된 세션 정보 확인
    window / mac: netstat -an
  • NetBios Cache 정보 확인
    window: nbtstat -n

  • DNS Cache 정보 확인
    window: ipconfig /displaydns
    mac: dscacheutil (파라미터는 모르겠음)

0개의 댓글